DFG inlining block linking compares BlockIndex against bytecode index
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jan 2012 02:54:06 +0000 (02:54 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jan 2012 02:54:06 +0000 (02:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=76018
<rdar://problem/10671979>

Reviewed by Gavin Barraclough.

Source/JavaScriptCore:

* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::parseCodeBlock):

LayoutTests:

* fast/js/dfg-inline-many-blocks-expected.txt: Added.
* fast/js/dfg-inline-many-blocks.html: Added.
* fast/js/script-tests/dfg-inline-many-blocks.js: Added.
(stuff):
(foo):
(fuzz):
(baz):
(bar):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@104660 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/js/dfg-inline-many-blocks-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/dfg-inline-many-blocks.html [new file with mode: 0644]
LayoutTests/fast/js/script-tests/dfg-inline-many-blocks.js [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp

index 2958f4f4a326ad9f1f239348078c4cc2c609a0d7..5e79f3a44131e56e162b2b4228a3d0b407eb4212 100644 (file)
@@ -1,3 +1,20 @@
+2012-01-10  Filip Pizlo  <fpizlo@apple.com>
+
+        DFG inlining block linking compares BlockIndex against bytecode index
+        https://bugs.webkit.org/show_bug.cgi?id=76018
+        <rdar://problem/10671979>
+
+        Reviewed by Gavin Barraclough.
+
+        * fast/js/dfg-inline-many-blocks-expected.txt: Added.
+        * fast/js/dfg-inline-many-blocks.html: Added.
+        * fast/js/script-tests/dfg-inline-many-blocks.js: Added.
+        (stuff):
+        (foo):
+        (fuzz):
+        (baz):
+        (bar):
+
 2012-01-10  Dale Curtis  <dalecurtis@chromium.org>
 
         Repaint video controls when buffering during pause.
diff --git a/LayoutTests/fast/js/dfg-inline-many-blocks-expected.txt b/LayoutTests/fast/js/dfg-inline-many-blocks-expected.txt
new file mode 100644 (file)
index 0000000..c64e7c7
--- /dev/null
@@ -0,0 +1,12005 @@
+Tests that inlining many basic blocks does not trigger a bad assertion.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+0
+0
+1
+1
+1
+1
+1
+-1
+3
+1
+1
+2
+1
+1
+2
+1
+2
+1
+2
+-1
+8
+2
+2
+3
+2
+2
+3
+2
+3
+2
+3
+-1
+15
+3
+3
+4
+3
+3
+4
+3
+4
+3
+4
+-1
+24
+4
+4
+5
+4
+4
+5
+4
+5
+4
+5
+-1
+35
+5
+5
+6
+5
+5
+6
+5
+6
+5
+6
+-1
+48
+6
+6
+7
+6
+6
+7
+6
+7
+6
+7
+-1
+63
+7
+7
+8
+7
+7
+8
+7
+8
+7
+8
+-1
+80
+8
+8
+9
+8
+8
+9
+8
+9
+8
+9
+-1
+99
+9
+9
+10
+9
+9
+10
+9
+10
+9
+10
+-1
+120
+10
+10
+11
+10
+10
+11
+10
+11
+10
+11
+-1
+143
+11
+11
+12
+11
+11
+12
+11
+12
+11
+12
+-1
+168
+12
+12
+13
+12
+12
+13
+12
+13
+12
+13
+-1
+195
+13
+13
+14
+13
+13
+14
+13
+14
+13
+14
+-1
+224
+14
+14
+15
+14
+14
+15
+14
+15
+14
+15
+-1
+255
+15
+15
+16
+15
+15
+16
+15
+16
+15
+16
+-1
+288
+16
+16
+17
+16
+16
+17
+16
+17
+16
+17
+-1
+323
+17
+17
+18
+17
+17
+18
+17
+18
+17
+18
+-1
+360
+18
+18
+19
+18
+18
+19
+18
+19
+18
+19
+-1
+399
+19
+19
+20
+19
+19
+20
+19
+20
+19
+20
+-1
+440
+20
+20
+21
+20
+20
+21
+20
+21
+20
+21
+-1
+483
+21
+21
+22
+21
+21
+22
+21
+22
+21
+22
+-1
+528
+22
+22
+23
+22
+22
+23
+22
+23
+22
+23
+-1
+575
+23
+23
+24
+23
+23
+24
+23
+24
+23
+24
+-1
+624
+24
+24
+25
+24
+24
+25
+24
+25
+24
+25
+-1
+675
+25
+25
+26
+25
+25
+26
+25
+26
+25
+26
+-1
+728
+26
+26
+27
+26
+26
+27
+26
+27
+26
+27
+-1
+783
+27
+27
+28
+27
+27
+28
+27
+28
+27
+28
+-1
+840
+28
+28
+29
+28
+28
+29
+28
+29
+28
+29
+-1
+899
+29
+29
+30
+29
+29
+30
+29
+30
+29
+30
+-1
+960
+30
+30
+31
+30
+30
+31
+30
+31
+30
+31
+-1
+1023
+31
+31
+32
+31
+31
+32
+31
+32
+31
+32
+-1
+1088
+32
+32
+33
+32
+32
+33
+32
+33
+32
+33
+-1
+1155
+33
+33
+34
+33
+33
+34
+33
+34
+33
+34
+-1
+1224
+34
+34
+35
+34
+34
+35
+34
+35
+34
+35
+-1
+1295
+35
+35
+36
+35
+35
+36
+35
+36
+35
+36
+-1
+1368
+36
+36
+37
+36
+36
+37
+36
+37
+36
+37
+-1
+1443
+37
+37
+38
+37
+37
+38
+37
+38
+37
+38
+-1
+1520
+38
+38
+39
+38
+38
+39
+38
+39
+38
+39
+-1
+1599
+39
+39
+40
+39
+39
+40
+39
+40
+39
+40
+-1
+1680
+40
+40
+41
+40
+40
+41
+40
+41
+40
+41
+-1
+1763
+41
+41
+42
+41
+41
+42
+41
+42
+41
+42
+-1
+1848
+42
+42
+43
+42
+42
+43
+42
+43
+42
+43
+-1
+1935
+43
+43
+44
+43
+43
+44
+43
+44
+43
+44
+-1
+2024
+44
+44
+45
+44
+44
+45
+44
+45
+44
+45
+-1
+2115
+45
+45
+46
+45
+45
+46
+45
+46
+45
+46
+-1
+2208
+46
+46
+47
+46
+46
+47
+46
+47
+46
+47
+-1
+2303
+47
+47
+48
+47
+47
+48
+47
+48
+47
+48
+-1
+2400
+48
+48
+49
+48
+48
+49
+48
+49
+48
+49
+-1
+2499
+49
+49
+50
+49
+49
+50
+49
+50
+49
+50
+-1
+2600
+50
+50
+51
+50
+50
+51
+50
+51
+50
+51
+-1
+2703
+51
+51
+52
+51
+51
+52
+51
+52
+51
+52
+-1
+2808
+52
+52
+53
+52
+52
+53
+52
+53
+52
+53
+-1
+2915
+53
+53
+54
+53
+53
+54
+53
+54
+53
+54
+-1
+3024
+54
+54
+55
+54
+54
+55
+54
+55
+54
+55
+-1
+3135
+55
+55
+56
+55
+55
+56
+55
+56
+55
+56
+-1
+3248
+56
+56
+57
+56
+56
+57
+56
+57
+56
+57
+-1
+3363
+57
+57
+58
+57
+57
+58
+57
+58
+57
+58
+-1
+3480
+58
+58
+59
+58
+58
+59
+58
+59
+58
+59
+-1
+3599
+59
+59
+60
+59
+59
+60
+59
+60
+59
+60
+-1
+3720
+60
+60
+61
+60
+60
+61
+60
+61
+60
+61
+-1
+3843
+61
+61
+62
+61
+61
+62
+61
+62
+61
+62
+-1
+3968
+62
+62
+63
+62
+62
+63
+62
+63
+62
+63
+-1
+4095
+63
+63
+64
+63
+63
+64
+63
+64
+63
+64
+-1
+4224
+64
+64
+65
+64
+64
+65
+64
+65
+64
+65
+-1
+4355
+65
+65
+66
+65
+65
+66
+65
+66
+65
+66
+-1
+4488
+66
+66
+67
+66
+66
+67
+66
+67
+66
+67
+-1
+4623
+67
+67
+68
+67
+67
+68
+67
+68
+67
+68
+-1
+4760
+68
+68
+69
+68
+68
+69
+68
+69
+68
+69
+-1
+4899
+69
+69
+70
+69
+69
+70
+69
+70
+69
+70
+-1
+5040
+70
+70
+71
+70
+70
+71
+70
+71
+70
+71
+-1
+5183
+71
+71
+72
+71
+71
+72
+71
+72
+71
+72
+-1
+5328
+72
+72
+73
+72
+72
+73
+72
+73
+72
+73
+-1
+5475
+73
+73
+74
+73
+73
+74
+73
+74
+73
+74
+-1
+5624
+74
+74
+75
+74
+74
+75
+74
+75
+74
+75
+-1
+5775
+75
+75
+76
+75
+75
+76
+75
+76
+75
+76
+-1
+5928
+76
+76
+77
+76
+76
+77
+76
+77
+76
+77
+-1
+6083
+77
+77
+78
+77
+77
+78
+77
+78
+77
+78
+-1
+6240
+78
+78
+79
+78
+78
+79
+78
+79
+78
+79
+-1
+6399
+79
+79
+80
+79
+79
+80
+79
+80
+79
+80
+-1
+6560
+80
+80
+81
+80
+80
+81
+80
+81
+80
+81
+-1
+6723
+81
+81
+82
+81
+81
+82
+81
+82
+81
+82
+-1
+6888
+82
+82
+83
+82
+82
+83
+82
+83
+82
+83
+-1
+7055
+83
+83
+84
+83
+83
+84
+83
+84
+83
+84
+-1
+7224
+84
+84
+85
+84
+84
+85
+84
+85
+84
+85
+-1
+7395
+85
+85
+86
+85
+85
+86
+85
+86
+85
+86
+-1
+7568
+86
+86
+87
+86
+86
+87
+86
+87
+86
+87
+-1
+7743
+87
+87
+88
+87
+87
+88
+87
+88
+87
+88
+-1
+7920
+88
+88
+89
+88
+88
+89
+88
+89
+88
+89
+-1
+8099
+89
+89
+90
+89
+89
+90
+89
+90
+89
+90
+-1
+8280
+90
+90
+91
+90
+90
+91
+90
+91
+90
+91
+-1
+8463
+91
+91
+92
+91
+91
+92
+91
+92
+91
+92
+-1
+8648
+92
+92
+93
+92
+92
+93
+92
+93
+92
+93
+-1
+8835
+93
+93
+94
+93
+93
+94
+93
+94
+93
+94
+-1
+9024
+94
+94
+95
+94
+94
+95
+94
+95
+94
+95
+-1
+9215
+95
+95
+96
+95
+95
+96
+95
+96
+95
+96
+-1
+9408
+96
+96
+97
+96
+96
+97
+96
+97
+96
+97
+-1
+9603
+97
+97
+98
+97
+97
+98
+97
+98
+97
+98
+-1
+9800
+98
+98
+99
+98
+98
+99
+98
+99
+98
+99
+-1
+9999
+99
+99
+100
+99
+99
+100
+99
+100
+99
+100
+-1
+10200
+100
+100
+101
+100
+100
+101
+100
+101
+100
+101
+-1
+10403
+101
+101
+102
+101
+101
+102
+101
+102
+101
+102
+-1
+10608
+102
+102
+103
+102
+102
+103
+102
+103
+102
+103
+-1
+10815
+103
+103
+104
+103
+103
+104
+103
+104
+103
+104
+-1
+11024
+104
+104
+105
+104
+104
+105
+104
+105
+104
+105
+-1
+11235
+105
+105
+106
+105
+105
+106
+105
+106
+105
+106
+-1
+11448
+106
+106
+107
+106
+106
+107
+106
+107
+106
+107
+-1
+11663
+107
+107
+108
+107
+107
+108
+107
+108
+107
+108
+-1
+11880
+108
+108
+109
+108
+108
+109
+108
+109
+108
+109
+-1
+12099
+109
+109
+110
+109
+109
+110
+109
+110
+109
+110
+-1
+12320
+110
+110
+111
+110
+110
+111
+110
+111
+110
+111
+-1
+12543
+111
+111
+112
+111
+111
+112
+111
+112
+111
+112
+-1
+12768
+112
+112
+113
+112
+112
+113
+112
+113
+112
+113
+-1
+12995
+113
+113
+114
+113
+113
+114
+113
+114
+113
+114
+-1
+13224
+114
+114
+115
+114
+114
+115
+114
+115
+114
+115
+-1
+13455
+115
+115
+116
+115
+115
+116
+115
+116
+115
+116
+-1
+13688
+116
+116
+117
+116
+116
+117
+116
+117
+116
+117
+-1
+13923
+117
+117
+118
+117
+117
+118
+117
+118
+117
+118
+-1
+14160
+118
+118
+119
+118
+118
+119
+118
+119
+118
+119
+-1
+14399
+119
+119
+120
+119
+119
+120
+119
+120
+119
+120
+-1
+14640
+120
+120
+121
+120
+120
+121
+120
+121
+120
+121
+-1
+14883
+121
+121
+122
+121
+121
+122
+121
+122
+121
+122
+-1
+15128
+122
+122
+123
+122
+122
+123
+122
+123
+122
+123
+-1
+15375
+123
+123
+124
+123
+123
+124
+123
+124
+123
+124
+-1
+15624
+124
+124
+125
+124
+124
+125
+124
+125
+124
+125
+-1
+15875
+125
+125
+126
+125
+125
+126
+125
+126
+125
+126
+-1
+16128
+126
+126
+127
+126
+126
+127
+126
+127
+126
+127
+-1
+16383
+127
+127
+128
+127
+127
+128
+127
+128
+127
+128
+-1
+16640
+128
+128
+129
+128
+128
+129
+128
+129
+128
+129
+-1
+16899
+129
+129
+130
+129
+129
+130
+129
+130
+129
+130
+-1
+17160
+130
+130
+131
+130
+130
+131
+130
+131
+130
+131
+-1
+17423
+131
+131
+132
+131
+131
+132
+131
+132
+131
+132
+-1
+17688
+132
+132
+133
+132
+132
+133
+132
+133
+132
+133
+-1
+17955
+133
+133
+134
+133
+133
+134
+133
+134
+133
+134
+-1
+18224
+134
+134
+135
+134
+134
+135
+134
+135
+134
+135
+-1
+18495
+135
+135
+136
+135
+135
+136
+135
+136
+135
+136
+-1
+18768
+136
+136
+137
+136
+136
+137
+136
+137
+136
+137
+-1
+19043
+137
+137
+138
+137
+137
+138
+137
+138
+137
+138
+-1
+19320
+138
+138
+139
+138
+138
+139
+138
+139
+138
+139
+-1
+19599
+139
+139
+140
+139
+139
+140
+139
+140
+139
+140
+-1
+19880
+140
+140
+141
+140
+140
+141
+140
+141
+140
+141
+-1
+20163
+141
+141
+142
+141
+141
+142
+141
+142
+141
+142
+-1
+20448
+142
+142
+143
+142
+142
+143
+142
+143
+142
+143
+-1
+20735
+143
+143
+144
+143
+143
+144
+143
+144
+143
+144
+-1
+21024
+144
+144
+145
+144
+144
+145
+144
+145
+144
+145
+-1
+21315
+145
+145
+146
+145
+145
+146
+145
+146
+145
+146
+-1
+21608
+146
+146
+147
+146
+146
+147
+146
+147
+146
+147
+-1
+21903
+147
+147
+148
+147
+147
+148
+147
+148
+147
+148
+-1
+22200
+148
+148
+149
+148
+148
+149
+148
+149
+148
+149
+-1
+22499
+149
+149
+150
+149
+149
+150
+149
+150
+149
+150
+-1
+22800
+150
+150
+151
+150
+150
+151
+150
+151
+150
+151
+-1
+23103
+151
+151
+152
+151
+151
+152
+151
+152
+151
+152
+-1
+23408
+152
+152
+153
+152
+152
+153
+152
+153
+152
+153
+-1
+23715
+153
+153
+154
+153
+153
+154
+153
+154
+153
+154
+-1
+24024
+154
+154
+155
+154
+154
+155
+154
+155
+154
+155
+-1
+24335
+155
+155
+156
+155
+155
+156
+155
+156
+155
+156
+-1
+24648
+156
+156
+157
+156
+156
+157
+156
+157
+156
+157
+-1
+24963
+157
+157
+158
+157
+157
+158
+157
+158
+157
+158
+-1
+25280
+158
+158
+159
+158
+158
+159
+158
+159
+158
+159
+-1
+25599
+159
+159
+160
+159
+159
+160
+159
+160
+159
+160
+-1
+25920
+160
+160
+161
+160
+160
+161
+160
+161
+160
+161
+-1
+26243
+161
+161
+162
+161
+161
+162
+161
+162
+161
+162
+-1
+26568
+162
+162
+163
+162
+162
+163
+162
+163
+162
+163
+-1
+26895
+163
+163
+164
+163
+163
+164
+163
+164
+163
+164
+-1
+27224
+164
+164
+165
+164
+164
+165
+164
+165
+164
+165
+-1
+27555
+165
+165
+166
+165
+165
+166
+165
+166
+165
+166
+-1
+27888
+166
+166
+167
+166
+166
+167
+166
+167
+166
+167
+-1
+28223
+167
+167
+168
+167
+167
+168
+167
+168
+167
+168
+-1
+28560
+168
+168
+169
+168
+168
+169
+168
+169
+168
+169
+-1
+28899
+169
+169
+170
+169
+169
+170
+169
+170
+169
+170
+-1
+29240
+170
+170
+171
+170
+170
+171
+170
+171
+170
+171
+-1
+29583
+171
+171
+172
+171
+171
+172
+171
+172
+171
+172
+-1
+29928
+172
+172
+173
+172
+172
+173
+172
+173
+172
+173
+-1
+30275
+173
+173
+174
+173
+173
+174
+173
+174
+173
+174
+-1
+30624
+174
+174
+175
+174
+174
+175
+174
+175
+174
+175
+-1
+30975
+175
+175
+176
+175
+175
+176
+175
+176
+175
+176
+-1
+31328
+176
+176
+177
+176
+176
+177
+176
+177
+176
+177
+-1
+31683
+177
+177
+178
+177
+177
+178
+177
+178
+177
+178
+-1
+32040
+178
+178
+179
+178
+178
+179
+178
+179
+178
+179
+-1
+32399
+179
+179
+180
+179
+179
+180
+179
+180
+179
+180
+-1
+32760
+180
+180
+181
+180
+180
+181
+180
+181
+180
+181
+-1
+33123
+181
+181
+182
+181
+181
+182
+181
+182
+181
+182
+-1
+33488
+182
+182
+183
+182
+182
+183
+182
+183
+182
+183
+-1
+33855
+183
+183
+184
+183
+183
+184
+183
+184
+183
+184
+-1
+34224
+184
+184
+185
+184
+184
+185
+184
+185
+184
+185
+-1
+34595
+185
+185
+186
+185
+185
+186
+185
+186
+185
+186
+-1
+34968
+186
+186
+187
+186
+186
+187
+186
+187
+186
+187
+-1
+35343
+187
+187
+188
+187
+187
+188
+187
+188
+187
+188
+-1
+35720
+188
+188
+189
+188
+188
+189
+188
+189
+188
+189
+-1
+36099
+189
+189
+190
+189
+189
+190
+189
+190
+189
+190
+-1
+36480
+190
+190
+191
+190
+190
+191
+190
+191
+190
+191
+-1
+36863
+191
+191
+192
+191
+191
+192
+191
+192
+191
+192
+-1
+37248
+192
+192
+193
+192
+192
+193
+192
+193
+192
+193
+-1
+37635
+193
+193
+194
+193
+193
+194
+193
+194
+193
+194
+-1
+38024
+194
+194
+195
+194
+194
+195
+194
+195
+194
+195
+-1
+38415
+195
+195
+196
+195
+195
+196
+195
+196
+195
+196
+-1
+38808
+196
+196
+197
+196
+196
+197
+196
+197
+196
+197
+-1
+39203
+197
+197
+198
+197
+197
+198
+197
+198
+197
+198
+-1
+39600
+198
+198
+199
+198
+198
+199
+198
+199
+198
+199
+-1
+39999
+199
+199
+200
+199
+199
+200
+199
+200
+199
+200
+-1
+40400
+200
+200
+201
+200
+200
+201
+200
+201
+200
+201
+-1
+40803
+201
+201
+202
+201
+201
+202
+201
+202
+201
+202
+-1
+41208
+202
+202
+203
+202
+202
+203
+202
+203
+202
+203
+-1
+41615
+203
+203
+204
+203
+203
+204
+203
+204
+203
+204
+-1
+42024
+204
+204
+205
+204
+204
+205
+204
+205
+204
+205
+-1
+42435
+205
+205
+206
+205
+205
+206
+205
+206
+205
+206
+-1
+42848
+206
+206
+207
+206
+206
+207
+206
+207
+206
+207
+-1
+43263
+207
+207
+208
+207
+207
+208
+207
+208
+207
+208
+-1
+43680
+208
+208
+209
+208
+208
+209
+208
+209
+208
+209
+-1
+44099
+209
+209
+210
+209
+209
+210
+209
+210
+209
+210
+-1
+44520
+210
+210
+211
+210
+210
+211
+210
+211
+210
+211
+-1
+44943
+211
+211
+212
+211
+211
+212
+211
+212
+211
+212
+-1
+45368
+212
+212
+213
+212
+212
+213
+212
+213
+212
+213
+-1
+45795
+213
+213
+214
+213
+213
+214
+213
+214
+213
+214
+-1
+46224
+214
+214
+215
+214
+214
+215
+214
+215
+214
+215
+-1
+46655
+215
+215
+216
+215
+215
+216
+215
+216
+215
+216
+-1
+47088
+216
+216
+217
+216
+216
+217
+216
+217
+216
+217
+-1
+47523
+217
+217
+218
+217
+217
+218
+217
+218
+217
+218
+-1
+47960
+218
+218
+219
+218
+218
+219
+218
+219
+218
+219
+-1
+48399
+219
+219
+220
+219
+219
+220
+219
+220
+219
+220
+-1
+48840
+220
+220
+221
+220
+220
+221
+220
+221
+220
+221
+-1
+49283
+221
+221
+222
+221
+221
+222
+221
+222
+221
+222
+-1
+49728
+222
+222
+223
+222
+222
+223
+222
+223
+222
+223
+-1
+50175
+223
+223
+224
+223
+223
+224
+223
+224
+223
+224
+-1
+50624
+224
+224
+225
+224
+224
+225
+224
+225
+224
+225
+-1
+51075
+225
+225
+226
+225
+225
+226
+225
+226
+225
+226
+-1
+51528
+226
+226
+227
+226
+226
+227
+226
+227
+226
+227
+-1
+51983
+227
+227
+228
+227
+227
+228
+227
+228
+227
+228
+-1
+52440
+228
+228
+229
+228
+228
+229
+228
+229
+228
+229
+-1
+52899
+229
+229
+230
+229
+229
+230
+229
+230
+229
+230
+-1
+53360
+230
+230
+231
+230
+230
+231
+230
+231
+230
+231
+-1
+53823
+231
+231
+232
+231
+231
+232
+231
+232
+231
+232
+-1
+54288
+232
+232
+233
+232
+232
+233
+232
+233
+232
+233
+-1
+54755
+233
+233
+234
+233
+233
+234
+233
+234
+233
+234
+-1
+55224
+234
+234
+235
+234
+234
+235
+234
+235
+234
+235
+-1
+55695
+235
+235
+236
+235
+235
+236
+235
+236
+235
+236
+-1
+56168
+236
+236
+237
+236
+236
+237
+236
+237
+236
+237
+-1
+56643
+237
+237
+238
+237
+237
+238
+237
+238
+237
+238
+-1
+57120
+238
+238
+239
+238
+238
+239
+238
+239
+238
+239
+-1
+57599
+239
+239
+240
+239
+239
+240
+239
+240
+239
+240
+-1
+58080
+240
+240
+241
+240
+240
+241
+240
+241
+240
+241
+-1
+58563
+241
+241
+242
+241
+241
+242
+241
+242
+241
+242
+-1
+59048
+242
+242
+243
+242
+242
+243
+242
+243
+242
+243
+-1
+59535
+243
+243
+244
+243
+243
+244
+243
+244
+243
+244
+-1
+60024
+244
+244
+245
+244
+244
+245
+244
+245
+244
+245
+-1
+60515
+245
+245
+246
+245
+245
+246
+245
+246
+245
+246
+-1
+61008
+246
+246
+247
+246
+246
+247
+246
+247
+246
+247
+-1
+61503
+247
+247
+248
+247
+247
+248
+247
+248
+247
+248
+-1
+62000
+248
+248
+249
+248
+248
+249
+248
+249
+248
+249
+-1
+62499
+249
+249
+250
+249
+249
+250
+249
+250
+249
+250
+-1
+63000
+250
+250
+251
+250
+250
+251
+250
+251
+250
+251
+-1
+63503
+251
+251
+252
+251
+251
+252
+251
+252
+251
+252
+-1
+64008
+252
+252
+253
+252
+252
+253
+252
+253
+252
+253
+-1
+64515
+253
+253
+254
+253
+253
+254
+253
+254
+253
+254
+-1
+65024
+254
+254
+255
+254
+254
+255
+254
+255
+254
+255
+-1
+65535
+255
+255
+256
+255
+255
+256
+255
+256
+255
+256
+-1
+66048
+256
+256
+257
+256
+256
+257
+256
+257
+256
+257
+-1
+66563
+257
+257
+258
+257
+257
+258
+257
+258
+257
+258
+-1
+67080
+258
+258
+259
+258
+258
+259
+258
+259
+258
+259
+-1
+67599
+259
+259
+260
+259
+259
+260
+259
+260
+259
+260
+-1
+68120
+260
+260
+261
+260
+260
+261
+260
+261
+260
+261
+-1
+68643
+261
+261
+262
+261
+261
+262
+261
+262
+261
+262
+-1
+69168
+262
+262
+263
+262
+262
+263
+262
+263
+262
+263
+-1
+69695
+263
+263
+264
+263
+263
+264
+263
+264
+263
+264
+-1
+70224
+264
+264
+265
+264
+264
+265
+264
+265
+264
+265
+-1
+70755
+265
+265
+266
+265
+265
+266
+265
+266
+265
+266
+-1
+71288
+266
+266
+267
+266
+266
+267
+266
+267
+266
+267
+-1
+71823
+267
+267
+268
+267
+267
+268
+267
+268
+267
+268
+-1
+72360
+268
+268
+269
+268
+268
+269
+268
+269
+268
+269
+-1
+72899
+269
+269
+270
+269
+269
+270
+269
+270
+269
+270
+-1
+73440
+270
+270
+271
+270
+270
+271
+270
+271
+270
+271
+-1
+73983
+271
+271
+272
+271
+271
+272
+271
+272
+271
+272
+-1
+74528
+272
+272
+273
+272
+272
+273
+272
+273
+272
+273
+-1
+75075
+273
+273
+274
+273
+273
+274
+273
+274
+273
+274
+-1
+75624
+274
+274
+275
+274
+274
+275
+274
+275
+274
+275
+-1
+76175
+275
+275
+276
+275
+275
+276
+275
+276
+275
+276
+-1
+76728
+276
+276
+277
+276
+276
+277
+276
+277
+276
+277
+-1
+77283
+277
+277
+278
+277
+277
+278
+277
+278
+277
+278
+-1
+77840
+278
+278
+279
+278
+278
+279
+278
+279
+278
+279
+-1
+78399
+279
+279
+280
+279
+279
+280
+279
+280
+279
+280
+-1
+78960
+280
+280
+281
+280
+280
+281
+280
+281
+280
+281
+-1
+79523
+281
+281
+282
+281
+281
+282
+281
+282
+281
+282
+-1
+80088
+282
+282
+283
+282
+282
+283
+282
+283
+282
+283
+-1
+80655
+283
+283
+284
+283
+283
+284
+283
+284
+283
+284
+-1
+81224
+284
+284
+285
+284
+284
+285
+284
+285
+284
+285
+-1
+81795
+285
+285
+286
+285
+285
+286
+285
+286
+285
+286
+-1
+82368
+286
+286
+287
+286
+286
+287
+286
+287
+286
+287
+-1
+82943
+287
+287
+288
+287
+287
+288
+287
+288
+287
+288
+-1
+83520
+288
+288
+289
+288
+288
+289
+288
+289
+288
+289
+-1
+84099
+289
+289
+290
+289
+289
+290
+289
+290
+289
+290
+-1
+84680
+290
+290
+291
+290
+290
+291
+290
+291
+290
+291
+-1
+85263
+291
+291
+292
+291
+291
+292
+291
+292
+291
+292
+-1
+85848
+292
+292
+293
+292
+292
+293
+292
+293
+292
+293
+-1
+86435
+293
+293
+294
+293
+293
+294
+293
+294
+293
+294
+-1
+87024
+294
+294
+295
+294
+294
+295
+294
+295
+294
+295
+-1
+87615
+295
+295
+296
+295
+295
+296
+295
+296
+295
+296
+-1
+88208
+296
+296
+297
+296
+296
+297
+296
+297
+296
+297
+-1
+88803
+297
+297
+298
+297
+297
+298
+297
+298
+297
+298
+-1
+89400
+298
+298
+299
+298
+298
+299
+298
+299
+298
+299
+-1
+89999
+299
+299
+300
+299
+299
+300
+299
+300
+299
+300
+-1
+90600
+300
+300
+301
+300
+300
+301
+300
+301
+300
+301
+-1
+91203
+301
+301
+302
+301
+301
+302
+301
+302
+301
+302
+-1
+91808
+302
+302
+303
+302
+302
+303
+302
+303
+302
+303
+-1
+92415
+303
+303
+304
+303
+303
+304
+303
+304
+303
+304
+-1
+93024
+304
+304
+305
+304
+304
+305
+304
+305
+304
+305
+-1
+93635
+305
+305
+306
+305
+305
+306
+305
+306
+305
+306
+-1
+94248
+306
+306
+307
+306
+306
+307
+306
+307
+306
+307
+-1
+94863
+307
+307
+308
+307
+307
+308
+307
+308
+307
+308
+-1
+95480
+308
+308
+309
+308
+308
+309
+308
+309
+308
+309
+-1
+96099
+309
+309
+310
+309
+309
+310
+309
+310
+309
+310
+-1
+96720
+310
+310
+311
+310
+310
+311
+310
+311
+310
+311
+-1
+97343
+311
+311
+312
+311
+311
+312
+311
+312
+311
+312
+-1
+97968
+312
+312
+313
+312
+312
+313
+312
+313
+312
+313
+-1
+98595
+313
+313
+314
+313
+313
+314
+313
+314
+313
+314
+-1
+99224
+314
+314
+315
+314
+314
+315
+314
+315
+314
+315
+-1
+99855
+315
+315
+316
+315
+315
+316
+315
+316
+315
+316
+-1
+100488
+316
+316
+317
+316
+316
+317
+316
+317
+316
+317
+-1
+101123
+317
+317
+318
+317
+317
+318
+317
+318
+317
+318
+-1
+101760
+318
+318
+319
+318
+318
+319
+318
+319
+318
+319
+-1
+102399
+319
+319
+320
+319
+319
+320
+319
+320
+319
+320
+-1
+103040
+320
+320
+321
+320
+320
+321
+320
+321
+320
+321
+-1
+103683
+321
+321
+322
+321
+321
+322
+321
+322
+321
+322
+-1
+104328
+322
+322
+323
+322
+322
+323
+322
+323
+322
+323
+-1
+104975
+323
+323
+324
+323
+323
+324
+323
+324
+323
+324
+-1
+105624
+324
+324
+325
+324
+324
+325
+324
+325
+324
+325
+-1
+106275
+325
+325
+326
+325
+325
+326
+325
+326
+325
+326
+-1
+106928
+326
+326
+327
+326
+326
+327
+326
+327
+326
+327
+-1
+107583
+327
+327
+328
+327
+327
+328
+327
+328
+327
+328
+-1
+108240
+328
+328
+329
+328
+328
+329
+328
+329
+328
+329
+-1
+108899
+329
+329
+330
+329
+329
+330
+329
+330
+329
+330
+-1
+109560
+330
+330
+331
+330
+330
+331
+330
+331
+330
+331
+-1
+110223
+331
+331
+332
+331
+331
+332
+331
+332
+331
+332
+-1
+110888
+332
+332
+333
+332
+332
+333
+332
+333
+332
+333
+-1
+111555
+333
+333
+334
+333
+333
+334
+333
+334
+333
+334
+-1
+112224
+334
+334
+335
+334
+334
+335
+334
+335
+334
+335
+-1
+112895
+335
+335
+336
+335
+335
+336
+335
+336
+335
+336
+-1
+113568
+336
+336
+337
+336
+336
+337
+336
+337
+336
+337
+-1
+114243
+337
+337
+338
+337
+337
+338
+337
+338
+337
+338
+-1
+114920
+338
+338
+339
+338
+338
+339
+338
+339
+338
+339
+-1
+115599
+339
+339
+340
+339
+339
+340
+339
+340
+339
+340
+-1
+116280
+340
+340
+341
+340
+340
+341
+340
+341
+340
+341
+-1
+116963
+341
+341
+342
+341
+341
+342
+341
+342
+341
+342
+-1
+117648
+342
+342
+343
+342
+342
+343
+342
+343
+342
+343
+-1
+118335
+343
+343
+344
+343
+343
+344
+343
+344
+343
+344
+-1
+119024
+344
+344
+345
+344
+344
+345
+344
+345
+344
+345
+-1
+119715
+345
+345
+346
+345
+345
+346
+345
+346
+345
+346
+-1
+120408
+346
+346
+347
+346
+346
+347
+346
+347
+346
+347
+-1
+121103
+347
+347
+348
+347
+347
+348
+347
+348
+347
+348
+-1
+121800
+348
+348
+349
+348
+348
+349
+348
+349
+348
+349
+-1
+122499
+349
+349
+350
+349
+349
+350
+349
+350
+349
+350
+-1
+123200
+350
+350
+351
+350
+350
+351
+350
+351
+350
+351
+-1
+123903
+351
+351
+352
+351
+351
+352
+351
+352
+351
+352
+-1
+124608
+352
+352
+353
+352
+352
+353
+352
+353
+352
+353
+-1
+125315
+353
+353
+354
+353
+353
+354
+353
+354
+353
+354
+-1
+126024
+354
+354
+355
+354
+354
+355
+354
+355
+354
+355
+-1
+126735
+355
+355
+356
+355
+355
+356
+355
+356
+355
+356
+-1
+127448
+356
+356
+357
+356
+356
+357
+356
+357
+356
+357
+-1
+128163
+357
+357
+358
+357
+357
+358
+357
+358
+357
+358
+-1
+128880
+358
+358
+359
+358
+358
+359
+358
+359
+358
+359
+-1
+129599
+359
+359
+360
+359
+359
+360
+359
+360
+359
+360
+-1
+130320
+360
+360
+361
+360
+360
+361
+360
+361
+360
+361
+-1
+131043
+361
+361
+362
+361
+361
+362
+361
+362
+361
+362
+-1
+131768
+362
+362
+363
+362
+362
+363
+362
+363
+362
+363
+-1
+132495
+363
+363
+364
+363
+363
+364
+363
+364
+363
+364
+-1
+133224
+364
+364
+365
+364
+364
+365
+364
+365
+364
+365
+-1
+133955
+365
+365
+366
+365
+365
+366
+365
+366
+365
+366
+-1
+134688
+366
+366
+367
+366
+366
+367
+366
+367
+366
+367
+-1
+135423
+367
+367
+368
+367
+367
+368
+367
+368
+367
+368
+-1
+136160
+368
+368
+369
+368
+368
+369
+368
+369
+368
+369
+-1
+136899
+369
+369
+370
+369
+369
+370
+369
+370
+369
+370
+-1
+137640
+370
+370
+371
+370
+370
+371
+370
+371
+370
+371
+-1
+138383
+371
+371
+372
+371
+371
+372
+371
+372
+371
+372
+-1
+139128
+372
+372
+373
+372
+372
+373
+372
+373
+372
+373
+-1
+139875
+373
+373
+374
+373
+373
+374
+373
+374
+373
+374
+-1
+140624
+374
+374
+375
+374
+374
+375
+374
+375
+374
+375
+-1
+141375
+375
+375
+376
+375
+375
+376
+375
+376
+375
+376
+-1
+142128
+376
+376
+377
+376
+376
+377
+376
+377
+376
+377
+-1
+142883
+377
+377
+378
+377
+377
+378
+377
+378
+377
+378
+-1
+143640
+378
+378
+379
+378
+378
+379
+378
+379
+378
+379
+-1
+144399
+379
+379
+380
+379
+379
+380
+379
+380
+379
+380
+-1
+145160
+380
+380
+381
+380
+380
+381
+380
+381
+380
+381
+-1
+145923
+381
+381
+382
+381
+381
+382
+381
+382
+381
+382
+-1
+146688
+382
+382
+383
+382
+382
+383
+382
+383
+382
+383
+-1
+147455
+383
+383
+384
+383
+383
+384
+383
+384
+383
+384
+-1
+148224
+384
+384
+385
+384
+384
+385
+384
+385
+384
+385
+-1
+148995
+385
+385
+386
+385
+385
+386
+385
+386
+385
+386
+-1
+149768
+386
+386
+387
+386
+386
+387
+386
+387
+386
+387
+-1
+150543
+387
+387
+388
+387
+387
+388
+387
+388
+387
+388
+-1
+151320
+388
+388
+389
+388
+388
+389
+388
+389
+388
+389
+-1
+152099
+389
+389
+390
+389
+389
+390
+389
+390
+389
+390
+-1
+152880
+390
+390
+391
+390
+390
+391
+390
+391
+390
+391
+-1
+153663
+391
+391
+392
+391
+391
+392
+391
+392
+391
+392
+-1
+154448
+392
+392
+393
+392
+392
+393
+392
+393
+392
+393
+-1
+155235
+393
+393
+394
+393
+393
+394
+393
+394
+393
+394
+-1
+156024
+394
+394
+395
+394
+394
+395
+394
+395
+394
+395
+-1
+156815
+395
+395
+396
+395
+395
+396
+395
+396
+395
+396
+-1
+157608
+396
+396
+397
+396
+396
+397
+396
+397
+396
+397
+-1
+158403
+397
+397
+398
+397
+397
+398
+397
+398
+397
+398
+-1
+159200
+398
+398
+399
+398
+398
+399
+398
+399
+398
+399
+-1
+159999
+399
+399
+400
+399
+399
+400
+399
+400
+399
+400
+-1
+160800
+400
+400
+401
+400
+400
+401
+400
+401
+400
+401
+-1
+161603
+401
+401
+402
+401
+401
+402
+401
+402
+401
+402
+-1
+162408
+402
+402
+403
+402
+402
+403
+402
+403
+402
+403
+-1
+163215
+403
+403
+404
+403
+403
+404
+403
+404
+403
+404
+-1
+164024
+404
+404
+405
+404
+404
+405
+404
+405
+404
+405
+-1
+164835
+405
+405
+406
+405
+405
+406
+405
+406
+405
+406
+-1
+165648
+406
+406
+407
+406
+406
+407
+406
+407
+406
+407
+-1
+166463
+407
+407
+408
+407
+407
+408
+407
+408
+407
+408
+-1
+167280
+408
+408
+409
+408
+408
+409
+408
+409
+408
+409
+-1
+168099
+409
+409
+410
+409
+409
+410
+409
+410
+409
+410
+-1
+168920
+410
+410
+411
+410
+410
+411
+410
+411
+410
+411
+-1
+169743
+411
+411
+412
+411
+411
+412
+411
+412
+411
+412
+-1
+170568
+412
+412
+413
+412
+412
+413
+412
+413
+412
+413
+-1
+171395
+413
+413
+414
+413
+413
+414
+413
+414
+413
+414
+-1
+172224
+414
+414
+415
+414
+414
+415
+414
+415
+414
+415
+-1
+173055
+415
+415
+416
+415
+415
+416
+415
+416
+415
+416
+-1
+173888
+416
+416
+417
+416
+416
+417
+416
+417
+416
+417
+-1
+174723
+417
+417
+418
+417
+417
+418
+417
+418
+417
+418
+-1
+175560
+418
+418
+419
+418
+418
+419
+418
+419
+418
+419
+-1
+176399
+419
+419
+420
+419
+419
+420
+419
+420
+419
+420
+-1
+177240
+420
+420
+421
+420
+420
+421
+420
+421
+420
+421
+-1
+178083
+421
+421
+422
+421
+421
+422
+421
+422
+421
+422
+-1
+178928
+422
+422
+423
+422
+422
+423
+422
+423
+422
+423
+-1
+179775
+423
+423
+424
+423
+423
+424
+423
+424
+423
+424
+-1
+180624
+424
+424
+425
+424
+424
+425
+424
+425
+424
+425
+-1
+181475
+425
+425
+426
+425
+425
+426
+425
+426
+425
+426
+-1
+182328
+426
+426
+427
+426
+426
+427
+426
+427
+426
+427
+-1
+183183
+427
+427
+428
+427
+427
+428
+427
+428
+427
+428
+-1
+184040
+428
+428
+429
+428
+428
+429
+428
+429
+428
+429
+-1
+184899
+429
+429
+430
+429
+429
+430
+429
+430
+429
+430
+-1
+185760
+430
+430
+431
+430
+430
+431
+430
+431
+430
+431
+-1
+186623
+431
+431
+432
+431
+431
+432
+431
+432
+431
+432
+-1
+187488
+432
+432
+433
+432
+432
+433
+432
+433
+432
+433
+-1
+188355
+433
+433
+434
+433
+433
+434
+433
+434
+433
+434
+-1
+189224
+434
+434
+435
+434
+434
+435
+434
+435
+434
+435
+-1
+190095
+435
+435
+436
+435
+435
+436
+435
+436
+435
+436
+-1
+190968
+436
+436
+437
+436
+436
+437
+436
+437
+436
+437
+-1
+191843
+437
+437
+438
+437
+437
+438
+437
+438
+437
+438
+-1
+192720
+438
+438
+439
+438
+438
+439
+438
+439
+438
+439
+-1
+193599
+439
+439
+440
+439
+439
+440
+439
+440
+439
+440
+-1
+194480
+440
+440
+441
+440
+440
+441
+440
+441
+440
+441
+-1
+195363
+441
+441
+442
+441
+441
+442
+441
+442
+441
+442
+-1
+196248
+442
+442
+443
+442
+442
+443
+442
+443
+442
+443
+-1
+197135
+443
+443
+444
+443
+443
+444
+443
+444
+443
+444
+-1
+198024
+444
+444
+445
+444
+444
+445
+444
+445
+444
+445
+-1
+198915
+445
+445
+446
+445
+445
+446
+445
+446
+445
+446
+-1
+199808
+446
+446
+447
+446
+446
+447
+446
+447
+446
+447
+-1
+200703
+447
+447
+448
+447
+447
+448
+447
+448
+447
+448
+-1
+201600
+448
+448
+449
+448
+448
+449
+448
+449
+448
+449
+-1
+202499
+449
+449
+450
+449
+449
+450
+449
+450
+449
+450
+-1
+203400
+450
+450
+451
+450
+450
+451
+450
+451
+450
+451
+-1
+204303
+451
+451
+452
+451
+451
+452
+451
+452
+451
+452
+-1
+205208
+452
+452
+453
+452
+452
+453
+452
+453
+452
+453
+-1
+206115
+453
+453
+454
+453
+453
+454
+453
+454
+453
+454
+-1
+207024
+454
+454
+455
+454
+454
+455
+454
+455
+454
+455
+-1
+207935
+455
+455
+456
+455
+455
+456
+455
+456
+455
+456
+-1
+208848
+456
+456
+457
+456
+456
+457
+456
+457
+456
+457
+-1
+209763
+457
+457
+458
+457
+457
+458
+457
+458
+457
+458
+-1
+210680
+458
+458
+459
+458
+458
+459
+458
+459
+458
+459
+-1
+211599
+459
+459
+460
+459
+459
+460
+459
+460
+459
+460
+-1
+212520
+460
+460
+461
+460
+460
+461
+460
+461
+460
+461
+-1
+213443
+461
+461
+462
+461
+461
+462
+461
+462
+461
+462
+-1
+214368
+462
+462
+463
+462
+462
+463
+462
+463
+462
+463
+-1
+215295
+463
+463
+464
+463
+463
+464
+463
+464
+463
+464
+-1
+216224
+464
+464
+465
+464
+464
+465
+464
+465
+464
+465
+-1
+217155
+465
+465
+466
+465
+465
+466
+465
+466
+465
+466
+-1
+218088
+466
+466
+467
+466
+466
+467
+466
+467
+466
+467
+-1
+219023
+467
+467
+468
+467
+467
+468
+467
+468
+467
+468
+-1
+219960
+468
+468
+469
+468
+468
+469
+468
+469
+468
+469
+-1
+220899
+469
+469
+470
+469
+469
+470
+469
+470
+469
+470
+-1
+221840
+470
+470
+471
+470
+470
+471
+470
+471
+470
+471
+-1
+222783
+471
+471
+472
+471
+471
+472
+471
+472
+471
+472
+-1
+223728
+472
+472
+473
+472
+472
+473
+472
+473
+472
+473
+-1
+224675
+473
+473
+474
+473
+473
+474
+473
+474
+473
+474
+-1
+225624
+474
+474
+475
+474
+474
+475
+474
+475
+474
+475
+-1
+226575
+475
+475
+476
+475
+475
+476
+475
+476
+475
+476
+-1
+227528
+476
+476
+477
+476
+476
+477
+476
+477
+476
+477
+-1
+228483
+477
+477
+478
+477
+477
+478
+477
+478
+477
+478
+-1
+229440
+478
+478
+479
+478
+478
+479
+478
+479
+478
+479
+-1
+230399
+479
+479
+480
+479
+479
+480
+479
+480
+479
+480
+-1
+231360
+480
+480
+481
+480
+480
+481
+480
+481
+480
+481
+-1
+232323
+481
+481
+482
+481
+481
+482
+481
+482
+481
+482
+-1
+233288
+482
+482
+483
+482
+482
+483
+482
+483
+482
+483
+-1
+234255
+483
+483
+484
+483
+483
+484
+483
+484
+483
+484
+-1
+235224
+484
+484
+485
+484
+484
+485
+484
+485
+484
+485
+-1
+236195
+485
+485
+486
+485
+485
+486
+485
+486
+485
+486
+-1
+237168
+486
+486
+487
+486
+486
+487
+486
+487
+486
+487
+-1
+238143
+487
+487
+488
+487
+487
+488
+487
+488
+487
+488
+-1
+239120
+488
+488
+489
+488
+488
+489
+488
+489
+488
+489
+-1
+240099
+489
+489
+490
+489
+489
+490
+489
+490
+489
+490
+-1
+241080
+490
+490
+491
+490
+490
+491
+490
+491
+490
+491
+-1
+242063
+491
+491
+492
+491
+491
+492
+491
+492
+491
+492
+-1
+243048
+492
+492
+493
+492
+492
+493
+492
+493
+492
+493
+-1
+244035
+493
+493
+494
+493
+493
+494
+493
+494
+493
+494
+-1
+245024
+494
+494
+495
+494
+494
+495
+494
+495
+494
+495
+-1
+246015
+495
+495
+496
+495
+495
+496
+495
+496
+495
+496
+-1
+247008
+496
+496
+497
+496
+496
+497
+496
+497
+496
+497
+-1
+248003
+497
+497
+498
+497
+497
+498
+497
+498
+497
+498
+-1
+249000
+498
+498
+499
+498
+498
+499
+498
+499
+498
+499
+-1
+249999
+499
+499
+500
+499
+499
+500
+499
+500
+499
+500
+-1
+251000
+500
+500
+501
+500
+500
+501
+500
+501
+500
+501
+-1
+252003
+501
+501
+502
+501
+501
+502
+501
+502
+501
+502
+-1
+253008
+502
+502
+503
+502
+502
+503
+502
+503
+502
+503
+-1
+254015
+503
+503
+504
+503
+503
+504
+503
+504
+503
+504
+-1
+255024
+504
+504
+505
+504
+504
+505
+504
+505
+504
+505
+-1
+256035
+505
+505
+506
+505
+505
+506
+505
+506
+505
+506
+-1
+257048
+506
+506
+507
+506
+506
+507
+506
+507
+506
+507
+-1
+258063
+507
+507
+508
+507
+507
+508
+507
+508
+507
+508
+-1
+259080
+508
+508
+509
+508
+508
+509
+508
+509
+508
+509
+-1
+260099
+509
+509
+510
+509
+509
+510
+509
+510
+509
+510
+-1
+261120
+510
+510
+511
+510
+510
+511
+510
+511
+510
+511
+-1
+262143
+511
+511
+512
+511
+511
+512
+511
+512
+511
+512
+-1
+263168
+512
+512
+513
+512
+512
+513
+512
+513
+512
+513
+-1
+264195
+513
+513
+514
+513
+513
+514
+513
+514
+513
+514
+-1
+265224
+514
+514
+515
+514
+514
+515
+514
+515
+514
+515
+-1
+266255
+515
+515
+516
+515
+515
+516
+515
+516
+515
+516
+-1
+267288
+516
+516
+517
+516
+516
+517
+516
+517
+516
+517
+-1
+268323
+517
+517
+518
+517
+517
+518
+517
+518
+517
+518
+-1
+269360
+518
+518
+519
+518
+518
+519
+518
+519
+518
+519
+-1
+270399
+519
+519
+520
+519
+519
+520
+519
+520
+519
+520
+-1
+271440
+520
+520
+521
+520
+520
+521
+520
+521
+520
+521
+-1
+272483
+521
+521
+522
+521
+521
+522
+521
+522
+521
+522
+-1
+273528
+522
+522
+523
+522
+522
+523
+522
+523
+522
+523
+-1
+274575
+523
+523
+524
+523
+523
+524
+523
+524
+523
+524
+-1
+275624
+524
+524
+525
+524
+524
+525
+524
+525
+524
+525
+-1
+276675
+525
+525
+526
+525
+525
+526
+525
+526
+525
+526
+-1
+277728
+526
+526
+527
+526
+526
+527
+526
+527
+526
+527
+-1
+278783
+527
+527
+528
+527
+527
+528
+527
+528
+527
+528
+-1
+279840
+528
+528
+529
+528
+528
+529
+528
+529
+528
+529
+-1
+280899
+529
+529
+530
+529
+529
+530
+529
+530
+529
+530
+-1
+281960
+530
+530
+531
+530
+530
+531
+530
+531
+530
+531
+-1
+283023
+531
+531
+532
+531
+531
+532
+531
+532
+531
+532
+-1
+284088
+532
+532
+533
+532
+532
+533
+532
+533
+532
+533
+-1
+285155
+533
+533
+534
+533
+533
+534
+533
+534
+533
+534
+-1
+286224
+534
+534
+535
+534
+534
+535
+534
+535
+534
+535
+-1
+287295
+535
+535
+536
+535
+535
+536
+535
+536
+535
+536
+-1
+288368
+536
+536
+537
+536
+536
+537
+536
+537
+536
+537
+-1
+289443
+537
+537
+538
+537
+537
+538
+537
+538
+537
+538
+-1
+290520
+538
+538
+539
+538
+538
+539
+538
+539
+538
+539
+-1
+291599
+539
+539
+540
+539
+539
+540
+539
+540
+539
+540
+-1
+292680
+540
+540
+541
+540
+540
+541
+540
+541
+540
+541
+-1
+293763
+541
+541
+542
+541
+541
+542
+541
+542
+541
+542
+-1
+294848
+542
+542
+543
+542
+542
+543
+542
+543
+542
+543
+-1
+295935
+543
+543
+544
+543
+543
+544
+543
+544
+543
+544
+-1
+297024
+544
+544
+545
+544
+544
+545
+544
+545
+544
+545
+-1
+298115
+545
+545
+546
+545
+545
+546
+545
+546
+545
+546
+-1
+299208
+546
+546
+547
+546
+546
+547
+546
+547
+546
+547
+-1
+300303
+547
+547
+548
+547
+547
+548
+547
+548
+547
+548
+-1
+301400
+548
+548
+549
+548
+548
+549
+548
+549
+548
+549
+-1
+302499
+549
+549
+550
+549
+549
+550
+549
+550
+549
+550
+-1
+303600
+550
+550
+551
+550
+550
+551
+550
+551
+550
+551
+-1
+304703
+551
+551
+552
+551
+551
+552
+551
+552
+551
+552
+-1
+305808
+552
+552
+553
+552
+552
+553
+552
+553
+552
+553
+-1
+306915
+553
+553
+554
+553
+553
+554
+553
+554
+553
+554
+-1
+308024
+554
+554
+555
+554
+554
+555
+554
+555
+554
+555
+-1
+309135
+555
+555
+556
+555
+555
+556
+555
+556
+555
+556
+-1
+310248
+556
+556
+557
+556
+556
+557
+556
+557
+556
+557
+-1
+311363
+557
+557
+558
+557
+557
+558
+557
+558
+557
+558
+-1
+312480
+558
+558
+559
+558
+558
+559
+558
+559
+558
+559
+-1
+313599
+559
+559
+560
+559
+559
+560
+559
+560
+559
+560
+-1
+314720
+560
+560
+561
+560
+560
+561
+560
+561
+560
+561
+-1
+315843
+561
+561
+562
+561
+561
+562
+561
+562
+561
+562
+-1
+316968
+562
+562
+563
+562
+562
+563
+562
+563
+562
+563
+-1
+318095
+563
+563
+564
+563
+563
+564
+563
+564
+563
+564
+-1
+319224
+564
+564
+565
+564
+564
+565
+564
+565
+564
+565
+-1
+320355
+565
+565
+566
+565
+565
+566
+565
+566
+565
+566
+-1
+321488
+566
+566
+567
+566
+566
+567
+566
+567
+566
+567
+-1
+322623
+567
+567
+568
+567
+567
+568
+567
+568
+567
+568
+-1
+323760
+568
+568
+569
+568
+568
+569
+568
+569
+568
+569
+-1
+324899
+569
+569
+570
+569
+569
+570
+569
+570
+569
+570
+-1
+326040
+570
+570
+571
+570
+570
+571
+570
+571
+570
+571
+-1
+327183
+571
+571
+572
+571
+571
+572
+571
+572
+571
+572
+-1
+328328
+572
+572
+573
+572
+572
+573
+572
+573
+572
+573
+-1
+329475
+573
+573
+574
+573
+573
+574
+573
+574
+573
+574
+-1
+330624
+574
+574
+575
+574
+574
+575
+574
+575
+574
+575
+-1
+331775
+575
+575
+576
+575
+575
+576
+575
+576
+575
+576
+-1
+332928
+576
+576
+577
+576
+576
+577
+576
+577
+576
+577
+-1
+334083
+577
+577
+578
+577
+577
+578
+577
+578
+577
+578
+-1
+335240
+578
+578
+579
+578
+578
+579
+578
+579
+578
+579
+-1
+336399
+579
+579
+580
+579
+579
+580
+579
+580
+579
+580
+-1
+337560
+580
+580
+581
+580
+580
+581
+580
+581
+580
+581
+-1
+338723
+581
+581
+582
+581
+581
+582
+581
+582
+581
+582
+-1
+339888
+582
+582
+583
+582
+582
+583
+582
+583
+582
+583
+-1
+341055
+583
+583
+584
+583
+583
+584
+583
+584
+583
+584
+-1
+342224
+584
+584
+585
+584
+584
+585
+584
+585
+584
+585
+-1
+343395
+585
+585
+586
+585
+585
+586
+585
+586
+585
+586
+-1
+344568
+586
+586
+587
+586
+586
+587
+586
+587
+586
+587
+-1
+345743
+587
+587
+588
+587
+587
+588
+587
+588
+587
+588
+-1
+346920
+588
+588
+589
+588
+588
+589
+588
+589
+588
+589
+-1
+348099
+589
+589
+590
+589
+589
+590
+589
+590
+589
+590
+-1
+349280
+590
+590
+591
+590
+590
+591
+590
+591
+590
+591
+-1
+350463
+591
+591
+592
+591
+591
+592
+591
+592
+591
+592
+-1
+351648
+592
+592
+593
+592
+592
+593
+592
+593
+592
+593
+-1
+352835
+593
+593
+594
+593
+593
+594
+593
+594
+593
+594
+-1
+354024
+594
+594
+595
+594
+594
+595
+594
+595
+594
+595
+-1
+355215
+595
+595
+596
+595
+595
+596
+595
+596
+595
+596
+-1
+356408
+596
+596
+597
+596
+596
+597
+596
+597
+596
+597
+-1
+357603
+597
+597
+598
+597
+597
+598
+597
+598
+597
+598
+-1
+358800
+598
+598
+599
+598
+598
+599
+598
+599
+598
+599
+-1
+359999
+599
+599
+600
+599
+599
+600
+599
+600
+599
+600
+-1
+361200
+600
+600
+601
+600
+600
+601
+600
+601
+600
+601
+-1
+362403
+601
+601
+602
+601
+601
+602
+601
+602
+601
+602
+-1
+363608
+602
+602
+603
+602
+602
+603
+602
+603
+602
+603
+-1
+364815
+603
+603
+604
+603
+603
+604
+603
+604
+603
+604
+-1
+366024
+604
+604
+605
+604
+604
+605
+604
+605
+604
+605
+-1
+367235
+605
+605
+606
+605
+605
+606
+605
+606
+605
+606
+-1
+368448
+606
+606
+607
+606
+606
+607
+606
+607
+606
+607
+-1
+369663
+607
+607
+608
+607
+607
+608
+607
+608
+607
+608
+-1
+370880
+608
+608
+609
+608
+608
+609
+608
+609
+608
+609
+-1
+372099
+609
+609
+610
+609
+609
+610
+609
+610
+609
+610
+-1
+373320
+610
+610
+611
+610
+610
+611
+610
+611
+610
+611
+-1
+374543
+611
+611
+612
+611
+611
+612
+611
+612
+611
+612
+-1
+375768
+612
+612
+613
+612
+612
+613
+612
+613
+612
+613
+-1
+376995
+613
+613
+614
+613
+613
+614
+613
+614
+613
+614
+-1
+378224
+614
+614
+615
+614
+614
+615
+614
+615
+614
+615
+-1
+379455
+615
+615
+616
+615
+615
+616
+615
+616
+615
+616
+-1
+380688
+616
+616
+617
+616
+616
+617
+616
+617
+616
+617
+-1
+381923
+617
+617
+618
+617
+617
+618
+617
+618
+617
+618
+-1
+383160
+618
+618
+619
+618
+618
+619
+618
+619
+618
+619
+-1
+384399
+619
+619
+620
+619
+619
+620
+619
+620
+619
+620
+-1
+385640
+620
+620
+621
+620
+620
+621
+620
+621
+620
+621
+-1
+386883
+621
+621
+622
+621
+621
+622
+621
+622
+621
+622
+-1
+388128
+622
+622
+623
+622
+622
+623
+622
+623
+622
+623
+-1
+389375
+623
+623
+624
+623
+623
+624
+623
+624
+623
+624
+-1
+390624
+624
+624
+625
+624
+624
+625
+624
+625
+624
+625
+-1
+391875
+625
+625
+626
+625
+625
+626
+625
+626
+625
+626
+-1
+393128
+626
+626
+627
+626
+626
+627
+626
+627
+626
+627
+-1
+394383
+627
+627
+628
+627
+627
+628
+627
+628
+627
+628
+-1
+395640
+628
+628
+629
+628
+628
+629
+628
+629
+628
+629
+-1
+396899
+629
+629
+630
+629
+629
+630
+629
+630
+629
+630
+-1
+398160
+630
+630
+631
+630
+630
+631
+630
+631
+630
+631
+-1
+399423
+631
+631
+632
+631
+631
+632
+631
+632
+631
+632
+-1
+400688
+632
+632
+633
+632
+632
+633
+632
+633
+632
+633
+-1
+401955
+633
+633
+634
+633
+633
+634
+633
+634
+633
+634
+-1
+403224
+634
+634
+635
+634
+634
+635
+634
+635
+634
+635
+-1
+404495
+635
+635
+636
+635
+635
+636
+635
+636
+635
+636
+-1
+405768
+636
+636
+637
+636
+636
+637
+636
+637
+636
+637
+-1
+407043
+637
+637
+638
+637
+637
+638
+637
+638
+637
+638
+-1
+408320
+638
+638
+639
+638
+638
+639
+638
+639
+638
+639
+-1
+409599
+639
+639
+640
+639
+639
+640
+639
+640
+639
+640
+-1
+410880
+640
+640
+641
+640
+640
+641
+640
+641
+640
+641
+-1
+412163
+641
+641
+642
+641
+641
+642
+641
+642
+641
+642
+-1
+413448
+642
+642
+643
+642
+642
+643
+642
+643
+642
+643
+-1
+414735
+643
+643
+644
+643
+643
+644
+643
+644
+643
+644
+-1
+416024
+644
+644
+645
+644
+644
+645
+644
+645
+644
+645
+-1
+417315
+645
+645
+646
+645
+645
+646
+645
+646
+645
+646
+-1
+418608
+646
+646
+647
+646
+646
+647
+646
+647
+646
+647
+-1
+419903
+647
+647
+648
+647
+647
+648
+647
+648
+647
+648
+-1
+421200
+648
+648
+649
+648
+648
+649
+648
+649
+648
+649
+-1
+422499
+649
+649
+650
+649
+649
+650
+649
+650
+649
+650
+-1
+423800
+650
+650
+651
+650
+650
+651
+650
+651
+650
+651
+-1
+425103
+651
+651
+652
+651
+651
+652
+651
+652
+651
+652
+-1
+426408
+652
+652
+653
+652
+652
+653
+652
+653
+652
+653
+-1
+427715
+653
+653
+654
+653
+653
+654
+653
+654
+653
+654
+-1
+429024
+654
+654
+655
+654
+654
+655
+654
+655
+654
+655
+-1
+430335
+655
+655
+656
+655
+655
+656
+655
+656
+655
+656
+-1
+431648
+656
+656
+657
+656
+656
+657
+656
+657
+656
+657
+-1
+432963
+657
+657
+658
+657
+657
+658
+657
+658
+657
+658
+-1
+434280
+658
+658
+659
+658
+658
+659
+658
+659
+658
+659
+-1
+435599
+659
+659
+660
+659
+659
+660
+659
+660
+659
+660
+-1
+436920
+660
+660
+661
+660
+660
+661
+660
+661
+660
+661
+-1
+438243
+661
+661
+662
+661
+661
+662
+661
+662
+661
+662
+-1
+439568
+662
+662
+663
+662
+662
+663
+662
+663
+662
+663
+-1
+440895
+663
+663
+664
+663
+663
+664
+663
+664
+663
+664
+-1
+442224
+664
+664
+665
+664
+664
+665
+664
+665
+664
+665
+-1
+443555
+665
+665
+666
+665
+665
+666
+665
+666
+665
+666
+-1
+444888
+666
+666
+667
+666
+666
+667
+666
+667
+666
+667
+-1
+446223
+667
+667
+668
+667
+667
+668
+667
+668
+667
+668
+-1
+447560
+668
+668
+669
+668
+668
+669
+668
+669
+668
+669
+-1
+448899
+669
+669
+670
+669
+669
+670
+669
+670
+669
+670
+-1
+450240
+670
+670
+671
+670
+670
+671
+670
+671
+670
+671
+-1
+451583
+671
+671
+672
+671
+671
+672
+671
+672
+671
+672
+-1
+452928
+672
+672
+673
+672
+672
+673
+672
+673
+672
+673
+-1
+454275
+673
+673
+674
+673
+673
+674
+673
+674
+673
+674
+-1
+455624
+674
+674
+675
+674
+674
+675
+674
+675
+674
+675
+-1
+456975
+675
+675
+676
+675
+675
+676
+675
+676
+675
+676
+-1
+458328
+676
+676
+677
+676
+676
+677
+676
+677
+676
+677
+-1
+459683
+677
+677
+678
+677
+677
+678
+677
+678
+677
+678
+-1
+461040
+678
+678
+679
+678
+678
+679
+678
+679
+678
+679
+-1
+462399
+679
+679
+680
+679
+679
+680
+679
+680
+679
+680
+-1
+463760
+680
+680
+681
+680
+680
+681
+680
+681
+680
+681
+-1
+465123
+681
+681
+682
+681
+681
+682
+681
+682
+681
+682
+-1
+466488
+682
+682
+683
+682
+682
+683
+682
+683
+682
+683
+-1
+467855
+683
+683
+684
+683
+683
+684
+683
+684
+683
+684
+-1
+469224
+684
+684
+685
+684
+684
+685
+684
+685
+684
+685
+-1
+470595
+685
+685
+686
+685
+685
+686
+685
+686
+685
+686
+-1
+471968
+686
+686
+687
+686
+686
+687
+686
+687
+686
+687
+-1
+473343
+687
+687
+688
+687
+687
+688
+687
+688
+687
+688
+-1
+474720
+688
+688
+689
+688
+688
+689
+688
+689
+688
+689
+-1
+476099
+689
+689
+690
+689
+689
+690
+689
+690
+689
+690
+-1
+477480
+690
+690
+691
+690
+690
+691
+690
+691
+690
+691
+-1
+478863
+691
+691
+692
+691
+691
+692
+691
+692
+691
+692
+-1
+480248
+692
+692
+693
+692
+692
+693
+692
+693
+692
+693
+-1
+481635
+693
+693
+694
+693
+693
+694
+693
+694
+693
+694
+-1
+483024
+694
+694
+695
+694
+694
+695
+694
+695
+694
+695
+-1
+484415
+695
+695
+696
+695
+695
+696
+695
+696
+695
+696
+-1
+485808
+696
+696
+697
+696
+696
+697
+696
+697
+696
+697
+-1
+487203
+697
+697
+698
+697
+697
+698
+697
+698
+697
+698
+-1
+488600
+698
+698
+699
+698
+698
+699
+698
+699
+698
+699
+-1
+489999
+699
+699
+700
+699
+699
+700
+699
+700
+699
+700
+-1
+491400
+700
+700
+701
+700
+700
+701
+700
+701
+700
+701
+-1
+492803
+701
+701
+702
+701
+701
+702
+701
+702
+701
+702
+-1
+494208
+702
+702
+703
+702
+702
+703
+702
+703
+702
+703
+-1
+495615
+703
+703
+704
+703
+703
+704
+703
+704
+703
+704
+-1
+497024
+704
+704
+705
+704
+704
+705
+704
+705
+704
+705
+-1
+498435
+705
+705
+706
+705
+705
+706
+705
+706
+705
+706
+-1
+499848
+706
+706
+707
+706
+706
+707
+706
+707
+706
+707
+-1
+501263
+707
+707
+708
+707
+707
+708
+707
+708
+707
+708
+-1
+502680
+708
+708
+709
+708
+708
+709
+708
+709
+708
+709
+-1
+504099
+709
+709
+710
+709
+709
+710
+709
+710
+709
+710
+-1
+505520
+710
+710
+711
+710
+710
+711
+710
+711
+710
+711
+-1
+506943
+711
+711
+712
+711
+711
+712
+711
+712
+711
+712
+-1
+508368
+712
+712
+713
+712
+712
+713
+712
+713
+712
+713
+-1
+509795
+713
+713
+714
+713
+713
+714
+713
+714
+713
+714
+-1
+511224
+714
+714
+715
+714
+714
+715
+714
+715
+714
+715
+-1
+512655
+715
+715
+716
+715
+715
+716
+715
+716
+715
+716
+-1
+514088
+716
+716
+717
+716
+716
+717
+716
+717
+716
+717
+-1
+515523
+717
+717
+718
+717
+717
+718
+717
+718
+717
+718
+-1
+516960
+718
+718
+719
+718
+718
+719
+718
+719
+718
+719
+-1
+518399
+719
+719
+720
+719
+719
+720
+719
+720
+719
+720
+-1
+519840
+720
+720
+721
+720
+720
+721
+720
+721
+720
+721
+-1
+521283
+721
+721
+722
+721
+721
+722
+721
+722
+721
+722
+-1
+522728
+722
+722
+723
+722
+722
+723
+722
+723
+722
+723
+-1
+524175
+723
+723
+724
+723
+723
+724
+723
+724
+723
+724
+-1
+525624
+724
+724
+725
+724
+724
+725
+724
+725
+724
+725
+-1
+527075
+725
+725
+726
+725
+725
+726
+725
+726
+725
+726
+-1
+528528
+726
+726
+727
+726
+726
+727
+726
+727
+726
+727
+-1
+529983
+727
+727
+728
+727
+727
+728
+727
+728
+727
+728
+-1
+531440
+728
+728
+729
+728
+728
+729
+728
+729
+728
+729
+-1
+532899
+729
+729
+730
+729
+729
+730
+729
+730
+729
+730
+-1
+534360
+730
+730
+731
+730
+730
+731
+730
+731
+730
+731
+-1
+535823
+731
+731
+732
+731
+731
+732
+731
+732
+731
+732
+-1
+537288
+732
+732
+733
+732
+732
+733
+732
+733
+732
+733
+-1
+538755
+733
+733
+734
+733
+733
+734
+733
+734
+733
+734
+-1
+540224
+734
+734
+735
+734
+734
+735
+734
+735
+734
+735
+-1
+541695
+735
+735
+736
+735
+735
+736
+735
+736
+735
+736
+-1
+543168
+736
+736
+737
+736
+736
+737
+736
+737
+736
+737
+-1
+544643
+737
+737
+738
+737
+737
+738
+737
+738
+737
+738
+-1
+546120
+738
+738
+739
+738
+738
+739
+738
+739
+738
+739
+-1
+547599
+739
+739
+740
+739
+739
+740
+739
+740
+739
+740
+-1
+549080
+740
+740
+741
+740
+740
+741
+740
+741
+740
+741
+-1
+550563
+741
+741
+742
+741
+741
+742
+741
+742
+741
+742
+-1
+552048
+742
+742
+743
+742
+742
+743
+742
+743
+742
+743
+-1
+553535
+743
+743
+744
+743
+743
+744
+743
+744
+743
+744
+-1
+555024
+744
+744
+745
+744
+744
+745
+744
+745
+744
+745
+-1
+556515
+745
+745
+746
+745
+745
+746
+745
+746
+745
+746
+-1
+558008
+746
+746
+747
+746
+746
+747
+746
+747
+746
+747
+-1
+559503
+747
+747
+748
+747
+747
+748
+747
+748
+747
+748
+-1
+561000
+748
+748
+749
+748
+748
+749
+748
+749
+748
+749
+-1
+562499
+749
+749
+750
+749
+749
+750
+749
+750
+749
+750
+-1
+564000
+750
+750
+751
+750
+750
+751
+750
+751
+750
+751
+-1
+565503
+751
+751
+752
+751
+751
+752
+751
+752
+751
+752
+-1
+567008
+752
+752
+753
+752
+752
+753
+752
+753
+752
+753
+-1
+568515
+753
+753
+754
+753
+753
+754
+753
+754
+753
+754
+-1
+570024
+754
+754
+755
+754
+754
+755
+754
+755
+754
+755
+-1
+571535
+755
+755
+756
+755
+755
+756
+755
+756
+755
+756
+-1
+573048
+756
+756
+757
+756
+756
+757
+756
+757
+756
+757
+-1
+574563
+757
+757
+758
+757
+757
+758
+757
+758
+757
+758
+-1
+576080
+758
+758
+759
+758
+758
+759
+758
+759
+758
+759
+-1
+577599
+759
+759
+760
+759
+759
+760
+759
+760
+759
+760
+-1
+579120
+760
+760
+761
+760
+760
+761
+760
+761
+760
+761
+-1
+580643
+761
+761
+762
+761
+761
+762
+761
+762
+761
+762
+-1
+582168
+762
+762
+763
+762
+762
+763
+762
+763
+762
+763
+-1
+583695
+763
+763
+764
+763
+763
+764
+763
+764
+763
+764
+-1
+585224
+764
+764
+765
+764
+764
+765
+764
+765
+764
+765
+-1
+586755
+765
+765
+766
+765
+765
+766
+765
+766
+765
+766
+-1
+588288
+766
+766
+767
+766
+766
+767
+766
+767
+766
+767
+-1
+589823
+767
+767
+768
+767
+767
+768
+767
+768
+767
+768
+-1
+591360
+768
+768
+769
+768
+768
+769
+768
+769
+768
+769
+-1
+592899
+769
+769
+770
+769
+769
+770
+769
+770
+769
+770
+-1
+594440
+770
+770
+771
+770
+770
+771
+770
+771
+770
+771
+-1
+595983
+771
+771
+772
+771
+771
+772
+771
+772
+771
+772
+-1
+597528
+772
+772
+773
+772
+772
+773
+772
+773
+772
+773
+-1
+599075
+773
+773
+774
+773
+773
+774
+773
+774
+773
+774
+-1
+600624
+774
+774
+775
+774
+774
+775
+774
+775
+774
+775
+-1
+602175
+775
+775
+776
+775
+775
+776
+775
+776
+775
+776
+-1
+603728
+776
+776
+777
+776
+776
+777
+776
+777
+776
+777
+-1
+605283
+777
+777
+778
+777
+777
+778
+777
+778
+777
+778
+-1
+606840
+778
+778
+779
+778
+778
+779
+778
+779
+778
+779
+-1
+608399
+779
+779
+780
+779
+779
+780
+779
+780
+779
+780
+-1
+609960
+780
+780
+781
+780
+780
+781
+780
+781
+780
+781
+-1
+611523
+781
+781
+782
+781
+781
+782
+781
+782
+781
+782
+-1
+613088
+782
+782
+783
+782
+782
+783
+782
+783
+782
+783
+-1
+614655
+783
+783
+784
+783
+783
+784
+783
+784
+783
+784
+-1
+616224
+784
+784
+785
+784
+784
+785
+784
+785
+784
+785
+-1
+617795
+785
+785
+786
+785
+785
+786
+785
+786
+785
+786
+-1
+619368
+786
+786
+787
+786
+786
+787
+786
+787
+786
+787
+-1
+620943
+787
+787
+788
+787
+787
+788
+787
+788
+787
+788
+-1
+622520
+788
+788
+789
+788
+788
+789
+788
+789
+788
+789
+-1
+624099
+789
+789
+790
+789
+789
+790
+789
+790
+789
+790
+-1
+625680
+790
+790
+791
+790
+790
+791
+790
+791
+790
+791
+-1
+627263
+791
+791
+792
+791
+791
+792
+791
+792
+791
+792
+-1
+628848
+792
+792
+793
+792
+792
+793
+792
+793
+792
+793
+-1
+630435
+793
+793
+794
+793
+793
+794
+793
+794
+793
+794
+-1
+632024
+794
+794
+795
+794
+794
+795
+794
+795
+794
+795
+-1
+633615
+795
+795
+796
+795
+795
+796
+795
+796
+795
+796
+-1
+635208
+796
+796
+797
+796
+796
+797
+796
+797
+796
+797
+-1
+636803
+797
+797
+798
+797
+797
+798
+797
+798
+797
+798
+-1
+638400
+798
+798
+799
+798
+798
+799
+798
+799
+798
+799
+-1
+639999
+799
+799
+800
+799
+799
+800
+799
+800
+799
+800
+-1
+641600
+800
+800
+801
+800
+800
+801
+800
+801
+800
+801
+-1
+643203
+801
+801
+802
+801
+801
+802
+801
+802
+801
+802
+-1
+644808
+802
+802
+803
+802
+802
+803
+802
+803
+802
+803
+-1
+646415
+803
+803
+804
+803
+803
+804
+803
+804
+803
+804
+-1
+648024
+804
+804
+805
+804
+804
+805
+804
+805
+804
+805
+-1
+649635
+805
+805
+806
+805
+805
+806
+805
+806
+805
+806
+-1
+651248
+806
+806
+807
+806
+806
+807
+806
+807
+806
+807
+-1
+652863
+807
+807
+808
+807
+807
+808
+807
+808
+807
+808
+-1
+654480
+808
+808
+809
+808
+808
+809
+808
+809
+808
+809
+-1
+656099
+809
+809
+810
+809
+809
+810
+809
+810
+809
+810
+-1
+657720
+810
+810
+811
+810
+810
+811
+810
+811
+810
+811
+-1
+659343
+811
+811
+812
+811
+811
+812
+811
+812
+811
+812
+-1
+660968
+812
+812
+813
+812
+812
+813
+812
+813
+812
+813
+-1
+662595
+813
+813
+814
+813
+813
+814
+813
+814
+813
+814
+-1
+664224
+814
+814
+815
+814
+814
+815
+814
+815
+814
+815
+-1
+665855
+815
+815
+816
+815
+815
+816
+815
+816
+815
+816
+-1
+667488
+816
+816
+817
+816
+816
+817
+816
+817
+816
+817
+-1
+669123
+817
+817
+818
+817
+817
+818
+817
+818
+817
+818
+-1
+670760
+818
+818
+819
+818
+818
+819
+818
+819
+818
+819
+-1
+672399
+819
+819
+820
+819
+819
+820
+819
+820
+819
+820
+-1
+674040
+820
+820
+821
+820
+820
+821
+820
+821
+820
+821
+-1
+675683
+821
+821
+822
+821
+821
+822
+821
+822
+821
+822
+-1
+677328
+822
+822
+823
+822
+822
+823
+822
+823
+822
+823
+-1
+678975
+823
+823
+824
+823
+823
+824
+823
+824
+823
+824
+-1
+680624
+824
+824
+825
+824
+824
+825
+824
+825
+824
+825
+-1
+682275
+825
+825
+826
+825
+825
+826
+825
+826
+825
+826
+-1
+683928
+826
+826
+827
+826
+826
+827
+826
+827
+826
+827
+-1
+685583
+827
+827
+828
+827
+827
+828
+827
+828
+827
+828
+-1
+687240
+828
+828
+829
+828
+828
+829
+828
+829
+828
+829
+-1
+688899
+829
+829
+830
+829
+829
+830
+829
+830
+829
+830
+-1
+690560
+830
+830
+831
+830
+830
+831
+830
+831
+830
+831
+-1
+692223
+831
+831
+832
+831
+831
+832
+831
+832
+831
+832
+-1
+693888
+832
+832
+833
+832
+832
+833
+832
+833
+832
+833
+-1
+695555
+833
+833
+834
+833
+833
+834
+833
+834
+833
+834
+-1
+697224
+834
+834
+835
+834
+834
+835
+834
+835
+834
+835
+-1
+698895
+835
+835
+836
+835
+835
+836
+835
+836
+835
+836
+-1
+700568
+836
+836
+837
+836
+836
+837
+836
+837
+836
+837
+-1
+702243
+837
+837
+838
+837
+837
+838
+837
+838
+837
+838
+-1
+703920
+838
+838
+839
+838
+838
+839
+838
+839
+838
+839
+-1
+705599
+839
+839
+840
+839
+839
+840
+839
+840
+839
+840
+-1
+707280
+840
+840
+841
+840
+840
+841
+840
+841
+840
+841
+-1
+708963
+841
+841
+842
+841
+841
+842
+841
+842
+841
+842
+-1
+710648
+842
+842
+843
+842
+842
+843
+842
+843
+842
+843
+-1
+712335
+843
+843
+844
+843
+843
+844
+843
+844
+843
+844
+-1
+714024
+844
+844
+845
+844
+844
+845
+844
+845
+844
+845
+-1
+715715
+845
+845
+846
+845
+845
+846
+845
+846
+845
+846
+-1
+717408
+846
+846
+847
+846
+846
+847
+846
+847
+846
+847
+-1
+719103
+847
+847
+848
+847
+847
+848
+847
+848
+847
+848
+-1
+720800
+848
+848
+849
+848
+848
+849
+848
+849
+848
+849
+-1
+722499
+849
+849
+850
+849
+849
+850
+849
+850
+849
+850
+-1
+724200
+850
+850
+851
+850
+850
+851
+850
+851
+850
+851
+-1
+725903
+851
+851
+852
+851
+851
+852
+851
+852
+851
+852
+-1
+727608
+852
+852
+853
+852
+852
+853
+852
+853
+852
+853
+-1
+729315
+853
+853
+854
+853
+853
+854
+853
+854
+853
+854
+-1
+731024
+854
+854
+855
+854
+854
+855
+854
+855
+854
+855
+-1
+732735
+855
+855
+856
+855
+855
+856
+855
+856
+855
+856
+-1
+734448
+856
+856
+857
+856
+856
+857
+856
+857
+856
+857
+-1
+736163
+857
+857
+858
+857
+857
+858
+857
+858
+857
+858
+-1
+737880
+858
+858
+859
+858
+858
+859
+858
+859
+858
+859
+-1
+739599
+859
+859
+860
+859
+859
+860
+859
+860
+859
+860
+-1
+741320
+860
+860
+861
+860
+860
+861
+860
+861
+860
+861
+-1
+743043
+861
+861
+862
+861
+861
+862
+861
+862
+861
+862
+-1
+744768
+862
+862
+863
+862
+862
+863
+862
+863
+862
+863
+-1
+746495
+863
+863
+864
+863
+863
+864
+863
+864
+863
+864
+-1
+748224
+864
+864
+865
+864
+864
+865
+864
+865
+864
+865
+-1
+749955
+865
+865
+866
+865
+865
+866
+865
+866
+865
+866
+-1
+751688
+866
+866
+867
+866
+866
+867
+866
+867
+866
+867
+-1
+753423
+867
+867
+868
+867
+867
+868
+867
+868
+867
+868
+-1
+755160
+868
+868
+869
+868
+868
+869
+868
+869
+868
+869
+-1
+756899
+869
+869
+870
+869
+869
+870
+869
+870
+869
+870
+-1
+758640
+870
+870
+871
+870
+870
+871
+870
+871
+870
+871
+-1
+760383
+871
+871
+872
+871
+871
+872
+871
+872
+871
+872
+-1
+762128
+872
+872
+873
+872
+872
+873
+872
+873
+872
+873
+-1
+763875
+873
+873
+874
+873
+873
+874
+873
+874
+873
+874
+-1
+765624
+874
+874
+875
+874
+874
+875
+874
+875
+874
+875
+-1
+767375
+875
+875
+876
+875
+875
+876
+875
+876
+875
+876
+-1
+769128
+876
+876
+877
+876
+876
+877
+876
+877
+876
+877
+-1
+770883
+877
+877
+878
+877
+877
+878
+877
+878
+877
+878
+-1
+772640
+878
+878
+879
+878
+878
+879
+878
+879
+878
+879
+-1
+774399
+879
+879
+880
+879
+879
+880
+879
+880
+879
+880
+-1
+776160
+880
+880
+881
+880
+880
+881
+880
+881
+880
+881
+-1
+777923
+881
+881
+882
+881
+881
+882
+881
+882
+881
+882
+-1
+779688
+882
+882
+883
+882
+882
+883
+882
+883
+882
+883
+-1
+781455
+883
+883
+884
+883
+883
+884
+883
+884
+883
+884
+-1
+783224
+884
+884
+885
+884
+884
+885
+884
+885
+884
+885
+-1
+784995
+885
+885
+886
+885
+885
+886
+885
+886
+885
+886
+-1
+786768
+886
+886
+887
+886
+886
+887
+886
+887
+886
+887
+-1
+788543
+887
+887
+888
+887
+887
+888
+887
+888
+887
+888
+-1
+790320
+888
+888
+889
+888
+888
+889
+888
+889
+888
+889
+-1
+792099
+889
+889
+890
+889
+889
+890
+889
+890
+889
+890
+-1
+793880
+890
+890
+891
+890
+890
+891
+890
+891
+890
+891
+-1
+795663
+891
+891
+892
+891
+891
+892
+891
+892
+891
+892
+-1
+797448
+892
+892
+893
+892
+892
+893
+892
+893
+892
+893
+-1
+799235
+893
+893
+894
+893
+893
+894
+893
+894
+893
+894
+-1
+801024
+894
+894
+895
+894
+894
+895
+894
+895
+894
+895
+-1
+802815
+895
+895
+896
+895
+895
+896
+895
+896
+895
+896
+-1
+804608
+896
+896
+897
+896
+896
+897
+896
+897
+896
+897
+-1
+806403
+897
+897
+898
+897
+897
+898
+897
+898
+897
+898
+-1
+808200
+898
+898
+899
+898
+898
+899
+898
+899
+898
+899
+-1
+809999
+899
+899
+900
+899
+899
+900
+899
+900
+899
+900
+-1
+811800
+900
+900
+901
+900
+900
+901
+900
+901
+900
+901
+-1
+813603
+901
+901
+902
+901
+901
+902
+901
+902
+901
+902
+-1
+815408
+902
+902
+903
+902
+902
+903
+902
+903
+902
+903
+-1
+817215
+903
+903
+904
+903
+903
+904
+903
+904
+903
+904
+-1
+819024
+904
+904
+905
+904
+904
+905
+904
+905
+904
+905
+-1
+820835
+905
+905
+906
+905
+905
+906
+905
+906
+905
+906
+-1
+822648
+906
+906
+907
+906
+906
+907
+906
+907
+906
+907
+-1
+824463
+907
+907
+908
+907
+907
+908
+907
+908
+907
+908
+-1
+826280
+908
+908
+909
+908
+908
+909
+908
+909
+908
+909
+-1
+828099
+909
+909
+910
+909
+909
+910
+909
+910
+909
+910
+-1
+829920
+910
+910
+911
+910
+910
+911
+910
+911
+910
+911
+-1
+831743
+911
+911
+912
+911
+911
+912
+911
+912
+911
+912
+-1
+833568
+912
+912
+913
+912
+912
+913
+912
+913
+912
+913
+-1
+835395
+913
+913
+914
+913
+913
+914
+913
+914
+913
+914
+-1
+837224
+914
+914
+915
+914
+914
+915
+914
+915
+914
+915
+-1
+839055
+915
+915
+916
+915
+915
+916
+915
+916
+915
+916
+-1
+840888
+916
+916
+917
+916
+916
+917
+916
+917
+916
+917
+-1
+842723
+917
+917
+918
+917
+917
+918
+917
+918
+917
+918
+-1
+844560
+918
+918
+919
+918
+918
+919
+918
+919
+918
+919
+-1
+846399
+919
+919
+920
+919
+919
+920
+919
+920
+919
+920
+-1
+848240
+920
+920
+921
+920
+920
+921
+920
+921
+920
+921
+-1
+850083
+921
+921
+922
+921
+921
+922
+921
+922
+921
+922
+-1
+851928
+922
+922
+923
+922
+922
+923
+922
+923
+922
+923
+-1
+853775
+923
+923
+924
+923
+923
+924
+923
+924
+923
+924
+-1
+855624
+924
+924
+925
+924
+924
+925
+924
+925
+924
+925
+-1
+857475
+925
+925
+926
+925
+925
+926
+925
+926
+925
+926
+-1
+859328
+926
+926
+927
+926
+926
+927
+926
+927
+926
+927
+-1
+861183
+927
+927
+928
+927
+927
+928
+927
+928
+927
+928
+-1
+863040
+928
+928
+929
+928
+928
+929
+928
+929
+928
+929
+-1
+864899
+929
+929
+930
+929
+929
+930
+929
+930
+929
+930
+-1
+866760
+930
+930
+931
+930
+930
+931
+930
+931
+930
+931
+-1
+868623
+931
+931
+932
+931
+931
+932
+931
+932
+931
+932
+-1
+870488
+932
+932
+933
+932
+932
+933
+932
+933
+932
+933
+-1
+872355
+933
+933
+934
+933
+933
+934
+933
+934
+933
+934
+-1
+874224
+934
+934
+935
+934
+934
+935
+934
+935
+934
+935
+-1
+876095
+935
+935
+936
+935
+935
+936
+935
+936
+935
+936
+-1
+877968
+936
+936
+937
+936
+936
+937
+936
+937
+936
+937
+-1
+879843
+937
+937
+938
+937
+937
+938
+937
+938
+937
+938
+-1
+881720
+938
+938
+939
+938
+938
+939
+938
+939
+938
+939
+-1
+883599
+939
+939
+940
+939
+939
+940
+939
+940
+939
+940
+-1
+885480
+940
+940
+941
+940
+940
+941
+940
+941
+940
+941
+-1
+887363
+941
+941
+942
+941
+941
+942
+941
+942
+941
+942
+-1
+889248
+942
+942
+943
+942
+942
+943
+942
+943
+942
+943
+-1
+891135
+943
+943
+944
+943
+943
+944
+943
+944
+943
+944
+-1
+893024
+944
+944
+945
+944
+944
+945
+944
+945
+944
+945
+-1
+894915
+945
+945
+946
+945
+945
+946
+945
+946
+945
+946
+-1
+896808
+946
+946
+947
+946
+946
+947
+946
+947
+946
+947
+-1
+898703
+947
+947
+948
+947
+947
+948
+947
+948
+947
+948
+-1
+900600
+948
+948
+949
+948
+948
+949
+948
+949
+948
+949
+-1
+902499
+949
+949
+950
+949
+949
+950
+949
+950
+949
+950
+-1
+904400
+950
+950
+951
+950
+950
+951
+950
+951
+950
+951
+-1
+906303
+951
+951
+952
+951
+951
+952
+951
+952
+951
+952
+-1
+908208
+952
+952
+953
+952
+952
+953
+952
+953
+952
+953
+-1
+910115
+953
+953
+954
+953
+953
+954
+953
+954
+953
+954
+-1
+912024
+954
+954
+955
+954
+954
+955
+954
+955
+954
+955
+-1
+913935
+955
+955
+956
+955
+955
+956
+955
+956
+955
+956
+-1
+915848
+956
+956
+957
+956
+956
+957
+956
+957
+956
+957
+-1
+917763
+957
+957
+958
+957
+957
+958
+957
+958
+957
+958
+-1
+919680
+958
+958
+959
+958
+958
+959
+958
+959
+958
+959
+-1
+921599
+959
+959
+960
+959
+959
+960
+959
+960
+959
+960
+-1
+923520
+960
+960
+961
+960
+960
+961
+960
+961
+960
+961
+-1
+925443
+961
+961
+962
+961
+961
+962
+961
+962
+961
+962
+-1
+927368
+962
+962
+963
+962
+962
+963
+962
+963
+962
+963
+-1
+929295
+963
+963
+964
+963
+963
+964
+963
+964
+963
+964
+-1
+931224
+964
+964
+965
+964
+964
+965
+964
+965
+964
+965
+-1
+933155
+965
+965
+966
+965
+965
+966
+965
+966
+965
+966
+-1
+935088
+966
+966
+967
+966
+966
+967
+966
+967
+966
+967
+-1
+937023
+967
+967
+968
+967
+967
+968
+967
+968
+967
+968
+-1
+938960
+968
+968
+969
+968
+968
+969
+968
+969
+968
+969
+-1
+940899
+969
+969
+970
+969
+969
+970
+969
+970
+969
+970
+-1
+942840
+970
+970
+971
+970
+970
+971
+970
+971
+970
+971
+-1
+944783
+971
+971
+972
+971
+971
+972
+971
+972
+971
+972
+-1
+946728
+972
+972
+973
+972
+972
+973
+972
+973
+972
+973
+-1
+948675
+973
+973
+974
+973
+973
+974
+973
+974
+973
+974
+-1
+950624
+974
+974
+975
+974
+974
+975
+974
+975
+974
+975
+-1
+952575
+975
+975
+976
+975
+975
+976
+975
+976
+975
+976
+-1
+954528
+976
+976
+977
+976
+976
+977
+976
+977
+976
+977
+-1
+956483
+977
+977
+978
+977
+977
+978
+977
+978
+977
+978
+-1
+958440
+978
+978
+979
+978
+978
+979
+978
+979
+978
+979
+-1
+960399
+979
+979
+980
+979
+979
+980
+979
+980
+979
+980
+-1
+962360
+980
+980
+981
+980
+980
+981
+980
+981
+980
+981
+-1
+964323
+981
+981
+982
+981
+981
+982
+981
+982
+981
+982
+-1
+966288
+982
+982
+983
+982
+982
+983
+982
+983
+982
+983
+-1
+968255
+983
+983
+984
+983
+983
+984
+983
+984
+983
+984
+-1
+970224
+984
+984
+985
+984
+984
+985
+984
+985
+984
+985
+-1
+972195
+985
+985
+986
+985
+985
+986
+985
+986
+985
+986
+-1
+974168
+986
+986
+987
+986
+986
+987
+986
+987
+986
+987
+-1
+976143
+987
+987
+988
+987
+987
+988
+987
+988
+987
+988
+-1
+978120
+988
+988
+989
+988
+988
+989
+988
+989
+988
+989
+-1
+980099
+989
+989
+990
+989
+989
+990
+989
+990
+989
+990
+-1
+982080
+990
+990
+991
+990
+990
+991
+990
+991
+990
+991
+-1
+984063
+991
+991
+992
+991
+991
+992
+991
+992
+991
+992
+-1
+986048
+992
+992
+993
+992
+992
+993
+992
+993
+992
+993
+-1
+988035
+993
+993
+994
+993
+993
+994
+993
+994
+993
+994
+-1
+990024
+994
+994
+995
+994
+994
+995
+994
+995
+994
+995
+-1
+992015
+995
+995
+996
+995
+995
+996
+995
+996
+995
+996
+-1
+994008
+996
+996
+997
+996
+996
+997
+996
+997
+996
+997
+-1
+996003
+997
+997
+998
+997
+997
+998
+997
+998
+997
+998
+-1
+998000
+998
+998
+999
+998
+998
+999
+998
+999
+998
+999
+-1
+999999
+999
+999
+1000
+999
+999
+1000
+999
+1000
+999
+1000
+-1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/dfg-inline-many-blocks.html b/LayoutTests/fast/js/dfg-inline-many-blocks.html
new file mode 100644 (file)
index 0000000..d63f3cb
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="script-tests/dfg-inline-many-blocks.js"></script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/script-tests/dfg-inline-many-blocks.js b/LayoutTests/fast/js/script-tests/dfg-inline-many-blocks.js
new file mode 100644 (file)
index 0000000..2a7561f
--- /dev/null
@@ -0,0 +1,43 @@
+description("Tests that inlining many basic blocks does not trigger a bad assertion.");
+
+function stuff(x) {
+    debug(x); // This needs to be a side-effect.
+}
+
+function foo(a, b) {
+    if (a) {
+        stuff(a);
+        return;
+    } else {
+        stuff(b);
+        return;
+    }
+}
+
+function fuzz(a, b) {
+    if (a + b)
+        foo(a, b);
+    if (a / b)
+        foo(b, a);
+    foo(a, b);
+}
+
+function baz(a, b) {
+    stuff(a);
+    if (a * b)
+        fuzz(a, b);
+    if (a - b)
+        fuzz(a, b);
+    fuzz(b, a);
+}
+
+function bar(a, b) {
+    stuff(a * b + a);
+    if (a + b)
+        baz(a, b);
+    stuff(a - b);
+}
+
+for (var i = 0; i < 1000; ++i)
+    bar(i, i + 1);
+
index 40ea9a731f52e8916333c58094d8d6c3dcc775bb..e25de4505dad620cdcfa7b9794ca1cb395f9ac87 100644 (file)
@@ -1,3 +1,14 @@
+2012-01-10  Filip Pizlo  <fpizlo@apple.com>
+
+        DFG inlining block linking compares BlockIndex against bytecode index
+        https://bugs.webkit.org/show_bug.cgi?id=76018
+        <rdar://problem/10671979>
+
+        Reviewed by Gavin Barraclough.
+
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::parseCodeBlock):
+
 2012-01-10  Filip Pizlo  <fpizlo@apple.com>
 
         CodeBlock.h declares too many things
index 5f54dafcdb6fda1413c6164f73c3cd4783e2a0b9..964618c43fab5b2fb631b0b0179d2fd99e929499 100644 (file)
@@ -2556,9 +2556,9 @@ void ByteCodeParser::parseCodeBlock()
                     // Either the block is linkable or it isn't. If it's linkable then it's the last
                     // block in the blockLinkingTargets list. If it's not then the last block will
                     // have a lower bytecode index that the one we're about to give to this block.
-                    if (m_inlineStackTop->m_blockLinkingTargets.isEmpty() || m_inlineStackTop->m_blockLinkingTargets.last() != m_currentIndex) {
+                    if (m_inlineStackTop->m_blockLinkingTargets.isEmpty() || m_graph.m_blocks[m_inlineStackTop->m_blockLinkingTargets.last()]->bytecodeBegin != m_currentIndex) {
                         // Make the block linkable.
-                        ASSERT(m_inlineStackTop->m_blockLinkingTargets.isEmpty() || m_inlineStackTop->m_blockLinkingTargets.last() < m_currentIndex);
+                        ASSERT(m_inlineStackTop->m_blockLinkingTargets.isEmpty() || m_graph.m_blocks[m_inlineStackTop->m_blockLinkingTargets.last()]->bytecodeBegin < m_currentIndex);
                         m_inlineStackTop->m_blockLinkingTargets.append(m_graph.m_blocks.size() - 1);
                     }
                     // Change its bytecode begin and continue.