1# 2# Copyright (c) 2017 The Khronos Group Inc. 3# Copyright (c) 2017 Valve Corporation 4# Copyright (c) 2017 LunarG, Inc. 5# 6# Licensed under the Apache License, Version 2.0 (the "License"); 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, software 13# distributed under the License is distributed on an "AS IS" BASIS, 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15# See the License for the specific language governing permissions and 16# limitations under the License. 17# 18# Author: Lenny Komow <lenny@lunarg.com> 19# 20 21# This code is used to pass on device (including physical device) extensions through the call chain. It must do this without 22# creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a 23# VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then 24# jump to the next function in the call chain 25 26.intel_syntax noprefix 27.include "gen_defines.asm" 28 29.ifdef X86_64 30 31.macro PhysDevExtTramp num 32.global vkPhysDevExtTramp\num 33vkPhysDevExtTramp\num: 34 mov rax, [rdi] 35 mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] 36 jmp [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))] 37.endm 38 39.macro PhysDevExtTermin num 40.global vkPhysDevExtTermin\num 41vkPhysDevExtTermin\num: 42 mov rax, [rdi + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in rax 43 cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL 44 je terminError\num # Go to the error section if it is NULL 45 mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Load the unwrapped VkPhysicalDevice into the first arg 46 jmp [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain 47terminError\num: 48 sub rsp, 56 # Create the stack frame 49 mov rdi, [rax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into rdi (first arg) 50 mov r8, [rdi + (HASH_OFFSET_INSTANCE + (HASH_SIZE * \num) + FUNC_NAME_OFFSET_HASH)] # Load the func name into r8 (fifth arg) 51 lea rcx, termin_error_string@GOTPCREL # Load the error string into rcx (fourth arg) 52 xor edx, edx # Set rdx to zero (third arg) 53 lea esi, [rdx + VK_DEBUG_REPORT_ERROR_BIT_EXT] # Write the error logging bit to rsi (second arg) 54 call loader_log # Log the error message before we crash 55 add rsp, 56 # Clean up the stack frame 56 mov rax, 0 57 jmp rax # Crash intentionally by jumping to address zero 58.endm 59 60.macro DevExtTramp num 61.global vkdev_ext\num 62vkdev_ext\num: 63 mov rax, [rdi] # Dereference the handle to get the dispatch table 64 jmp [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain 65.endm 66 67.else 68 69.macro PhysDevExtTramp num 70.global vkPhysDevExtTramp\num 71vkPhysDevExtTramp\num: 72 mov eax, [esp + 4] # Load the wrapped VkPhysicalDevice into eax 73 mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] # Load the unwrapped VkPhysicalDevice into ecx 74 mov [esp + 4], ecx # Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack) 75 mov eax, [eax] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax 76 jmp [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax 77.endm 78 79.macro PhysDevExtTermin num 80.global vkPhysDevExtTermin\num 81vkPhysDevExtTermin\num: 82 mov ecx, [esp + 4] # Move the wrapped VkPhysicalDevice into ecx 83 mov eax, [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in eax 84 cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL 85 je terminError\num # Go to the error section if it is NULL 86 mov ecx, [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Unwrap the VkPhysicalDevice in ecx 87 mov [esp + 4], ecx # Copy the unwrapped VkPhysicalDevice into the first arg 88 jmp [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain 89terminError\num: 90 mov eax, [eax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into eax 91 push [eax + (HASH_OFFSET_INSTANCE + (HASH_SIZE * \num) + FUNC_NAME_OFFSET_HASH)] # Push the func name (fifth arg) 92 push offset termin_error_string@GOT # Push the error string (fourth arg) 93 push 0 # Push zero (third arg) 94 push VK_DEBUG_REPORT_ERROR_BIT_EXT # Push the error logging bit (second arg) 95 push eax # Push the loader_instance (first arg) 96 call loader_log # Log the error message before we crash 97 add esp, 20 # Clean up the args 98 mov eax, 0 99 jmp eax # Crash intentionally by jumping to address zero 100.endm 101 102.macro DevExtTramp num 103.global vkdev_ext\num 104vkdev_ext\num: 105 mov eax, [esp + 4] # Dereference the handle to get the dispatch table 106 jmp [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain 107.endm 108 109.endif 110 111#if defined(__ELF__) 112.section .note.GNU-stack,"",%progbits 113#endif 114 115.data 116 117termin_error_string: 118.string "Extension %s not supported for this physical device" 119 120.text 121 122 PhysDevExtTramp 0 123 PhysDevExtTramp 1 124 PhysDevExtTramp 2 125 PhysDevExtTramp 3 126 PhysDevExtTramp 4 127 PhysDevExtTramp 5 128 PhysDevExtTramp 6 129 PhysDevExtTramp 7 130 PhysDevExtTramp 8 131 PhysDevExtTramp 9 132 PhysDevExtTramp 10 133 PhysDevExtTramp 11 134 PhysDevExtTramp 12 135 PhysDevExtTramp 13 136 PhysDevExtTramp 14 137 PhysDevExtTramp 15 138 PhysDevExtTramp 16 139 PhysDevExtTramp 17 140 PhysDevExtTramp 18 141 PhysDevExtTramp 19 142 PhysDevExtTramp 20 143 PhysDevExtTramp 21 144 PhysDevExtTramp 22 145 PhysDevExtTramp 23 146 PhysDevExtTramp 24 147 PhysDevExtTramp 25 148 PhysDevExtTramp 26 149 PhysDevExtTramp 27 150 PhysDevExtTramp 28 151 PhysDevExtTramp 29 152 PhysDevExtTramp 30 153 PhysDevExtTramp 31 154 PhysDevExtTramp 32 155 PhysDevExtTramp 33 156 PhysDevExtTramp 34 157 PhysDevExtTramp 35 158 PhysDevExtTramp 36 159 PhysDevExtTramp 37 160 PhysDevExtTramp 38 161 PhysDevExtTramp 39 162 PhysDevExtTramp 40 163 PhysDevExtTramp 41 164 PhysDevExtTramp 42 165 PhysDevExtTramp 43 166 PhysDevExtTramp 44 167 PhysDevExtTramp 45 168 PhysDevExtTramp 46 169 PhysDevExtTramp 47 170 PhysDevExtTramp 48 171 PhysDevExtTramp 49 172 PhysDevExtTramp 50 173 PhysDevExtTramp 51 174 PhysDevExtTramp 52 175 PhysDevExtTramp 53 176 PhysDevExtTramp 54 177 PhysDevExtTramp 55 178 PhysDevExtTramp 56 179 PhysDevExtTramp 57 180 PhysDevExtTramp 58 181 PhysDevExtTramp 59 182 PhysDevExtTramp 60 183 PhysDevExtTramp 61 184 PhysDevExtTramp 62 185 PhysDevExtTramp 63 186 PhysDevExtTramp 64 187 PhysDevExtTramp 65 188 PhysDevExtTramp 66 189 PhysDevExtTramp 67 190 PhysDevExtTramp 68 191 PhysDevExtTramp 69 192 PhysDevExtTramp 70 193 PhysDevExtTramp 71 194 PhysDevExtTramp 72 195 PhysDevExtTramp 73 196 PhysDevExtTramp 74 197 PhysDevExtTramp 75 198 PhysDevExtTramp 76 199 PhysDevExtTramp 77 200 PhysDevExtTramp 78 201 PhysDevExtTramp 79 202 PhysDevExtTramp 80 203 PhysDevExtTramp 81 204 PhysDevExtTramp 82 205 PhysDevExtTramp 83 206 PhysDevExtTramp 84 207 PhysDevExtTramp 85 208 PhysDevExtTramp 86 209 PhysDevExtTramp 87 210 PhysDevExtTramp 88 211 PhysDevExtTramp 89 212 PhysDevExtTramp 90 213 PhysDevExtTramp 91 214 PhysDevExtTramp 92 215 PhysDevExtTramp 93 216 PhysDevExtTramp 94 217 PhysDevExtTramp 95 218 PhysDevExtTramp 96 219 PhysDevExtTramp 97 220 PhysDevExtTramp 98 221 PhysDevExtTramp 99 222 PhysDevExtTramp 100 223 PhysDevExtTramp 101 224 PhysDevExtTramp 102 225 PhysDevExtTramp 103 226 PhysDevExtTramp 104 227 PhysDevExtTramp 105 228 PhysDevExtTramp 106 229 PhysDevExtTramp 107 230 PhysDevExtTramp 108 231 PhysDevExtTramp 109 232 PhysDevExtTramp 110 233 PhysDevExtTramp 111 234 PhysDevExtTramp 112 235 PhysDevExtTramp 113 236 PhysDevExtTramp 114 237 PhysDevExtTramp 115 238 PhysDevExtTramp 116 239 PhysDevExtTramp 117 240 PhysDevExtTramp 118 241 PhysDevExtTramp 119 242 PhysDevExtTramp 120 243 PhysDevExtTramp 121 244 PhysDevExtTramp 122 245 PhysDevExtTramp 123 246 PhysDevExtTramp 124 247 PhysDevExtTramp 125 248 PhysDevExtTramp 126 249 PhysDevExtTramp 127 250 PhysDevExtTramp 128 251 PhysDevExtTramp 129 252 PhysDevExtTramp 130 253 PhysDevExtTramp 131 254 PhysDevExtTramp 132 255 PhysDevExtTramp 133 256 PhysDevExtTramp 134 257 PhysDevExtTramp 135 258 PhysDevExtTramp 136 259 PhysDevExtTramp 137 260 PhysDevExtTramp 138 261 PhysDevExtTramp 139 262 PhysDevExtTramp 140 263 PhysDevExtTramp 141 264 PhysDevExtTramp 142 265 PhysDevExtTramp 143 266 PhysDevExtTramp 144 267 PhysDevExtTramp 145 268 PhysDevExtTramp 146 269 PhysDevExtTramp 147 270 PhysDevExtTramp 148 271 PhysDevExtTramp 149 272 PhysDevExtTramp 150 273 PhysDevExtTramp 151 274 PhysDevExtTramp 152 275 PhysDevExtTramp 153 276 PhysDevExtTramp 154 277 PhysDevExtTramp 155 278 PhysDevExtTramp 156 279 PhysDevExtTramp 157 280 PhysDevExtTramp 158 281 PhysDevExtTramp 159 282 PhysDevExtTramp 160 283 PhysDevExtTramp 161 284 PhysDevExtTramp 162 285 PhysDevExtTramp 163 286 PhysDevExtTramp 164 287 PhysDevExtTramp 165 288 PhysDevExtTramp 166 289 PhysDevExtTramp 167 290 PhysDevExtTramp 168 291 PhysDevExtTramp 169 292 PhysDevExtTramp 170 293 PhysDevExtTramp 171 294 PhysDevExtTramp 172 295 PhysDevExtTramp 173 296 PhysDevExtTramp 174 297 PhysDevExtTramp 175 298 PhysDevExtTramp 176 299 PhysDevExtTramp 177 300 PhysDevExtTramp 178 301 PhysDevExtTramp 179 302 PhysDevExtTramp 180 303 PhysDevExtTramp 181 304 PhysDevExtTramp 182 305 PhysDevExtTramp 183 306 PhysDevExtTramp 184 307 PhysDevExtTramp 185 308 PhysDevExtTramp 186 309 PhysDevExtTramp 187 310 PhysDevExtTramp 188 311 PhysDevExtTramp 189 312 PhysDevExtTramp 190 313 PhysDevExtTramp 191 314 PhysDevExtTramp 192 315 PhysDevExtTramp 193 316 PhysDevExtTramp 194 317 PhysDevExtTramp 195 318 PhysDevExtTramp 196 319 PhysDevExtTramp 197 320 PhysDevExtTramp 198 321 PhysDevExtTramp 199 322 PhysDevExtTramp 200 323 PhysDevExtTramp 201 324 PhysDevExtTramp 202 325 PhysDevExtTramp 203 326 PhysDevExtTramp 204 327 PhysDevExtTramp 205 328 PhysDevExtTramp 206 329 PhysDevExtTramp 207 330 PhysDevExtTramp 208 331 PhysDevExtTramp 209 332 PhysDevExtTramp 210 333 PhysDevExtTramp 211 334 PhysDevExtTramp 212 335 PhysDevExtTramp 213 336 PhysDevExtTramp 214 337 PhysDevExtTramp 215 338 PhysDevExtTramp 216 339 PhysDevExtTramp 217 340 PhysDevExtTramp 218 341 PhysDevExtTramp 219 342 PhysDevExtTramp 220 343 PhysDevExtTramp 221 344 PhysDevExtTramp 222 345 PhysDevExtTramp 223 346 PhysDevExtTramp 224 347 PhysDevExtTramp 225 348 PhysDevExtTramp 226 349 PhysDevExtTramp 227 350 PhysDevExtTramp 228 351 PhysDevExtTramp 229 352 PhysDevExtTramp 230 353 PhysDevExtTramp 231 354 PhysDevExtTramp 232 355 PhysDevExtTramp 233 356 PhysDevExtTramp 234 357 PhysDevExtTramp 235 358 PhysDevExtTramp 236 359 PhysDevExtTramp 237 360 PhysDevExtTramp 238 361 PhysDevExtTramp 239 362 PhysDevExtTramp 240 363 PhysDevExtTramp 241 364 PhysDevExtTramp 242 365 PhysDevExtTramp 243 366 PhysDevExtTramp 244 367 PhysDevExtTramp 245 368 PhysDevExtTramp 246 369 PhysDevExtTramp 247 370 PhysDevExtTramp 248 371 PhysDevExtTramp 249 372 373 PhysDevExtTermin 0 374 PhysDevExtTermin 1 375 PhysDevExtTermin 2 376 PhysDevExtTermin 3 377 PhysDevExtTermin 4 378 PhysDevExtTermin 5 379 PhysDevExtTermin 6 380 PhysDevExtTermin 7 381 PhysDevExtTermin 8 382 PhysDevExtTermin 9 383 PhysDevExtTermin 10 384 PhysDevExtTermin 11 385 PhysDevExtTermin 12 386 PhysDevExtTermin 13 387 PhysDevExtTermin 14 388 PhysDevExtTermin 15 389 PhysDevExtTermin 16 390 PhysDevExtTermin 17 391 PhysDevExtTermin 18 392 PhysDevExtTermin 19 393 PhysDevExtTermin 20 394 PhysDevExtTermin 21 395 PhysDevExtTermin 22 396 PhysDevExtTermin 23 397 PhysDevExtTermin 24 398 PhysDevExtTermin 25 399 PhysDevExtTermin 26 400 PhysDevExtTermin 27 401 PhysDevExtTermin 28 402 PhysDevExtTermin 29 403 PhysDevExtTermin 30 404 PhysDevExtTermin 31 405 PhysDevExtTermin 32 406 PhysDevExtTermin 33 407 PhysDevExtTermin 34 408 PhysDevExtTermin 35 409 PhysDevExtTermin 36 410 PhysDevExtTermin 37 411 PhysDevExtTermin 38 412 PhysDevExtTermin 39 413 PhysDevExtTermin 40 414 PhysDevExtTermin 41 415 PhysDevExtTermin 42 416 PhysDevExtTermin 43 417 PhysDevExtTermin 44 418 PhysDevExtTermin 45 419 PhysDevExtTermin 46 420 PhysDevExtTermin 47 421 PhysDevExtTermin 48 422 PhysDevExtTermin 49 423 PhysDevExtTermin 50 424 PhysDevExtTermin 51 425 PhysDevExtTermin 52 426 PhysDevExtTermin 53 427 PhysDevExtTermin 54 428 PhysDevExtTermin 55 429 PhysDevExtTermin 56 430 PhysDevExtTermin 57 431 PhysDevExtTermin 58 432 PhysDevExtTermin 59 433 PhysDevExtTermin 60 434 PhysDevExtTermin 61 435 PhysDevExtTermin 62 436 PhysDevExtTermin 63 437 PhysDevExtTermin 64 438 PhysDevExtTermin 65 439 PhysDevExtTermin 66 440 PhysDevExtTermin 67 441 PhysDevExtTermin 68 442 PhysDevExtTermin 69 443 PhysDevExtTermin 70 444 PhysDevExtTermin 71 445 PhysDevExtTermin 72 446 PhysDevExtTermin 73 447 PhysDevExtTermin 74 448 PhysDevExtTermin 75 449 PhysDevExtTermin 76 450 PhysDevExtTermin 77 451 PhysDevExtTermin 78 452 PhysDevExtTermin 79 453 PhysDevExtTermin 80 454 PhysDevExtTermin 81 455 PhysDevExtTermin 82 456 PhysDevExtTermin 83 457 PhysDevExtTermin 84 458 PhysDevExtTermin 85 459 PhysDevExtTermin 86 460 PhysDevExtTermin 87 461 PhysDevExtTermin 88 462 PhysDevExtTermin 89 463 PhysDevExtTermin 90 464 PhysDevExtTermin 91 465 PhysDevExtTermin 92 466 PhysDevExtTermin 93 467 PhysDevExtTermin 94 468 PhysDevExtTermin 95 469 PhysDevExtTermin 96 470 PhysDevExtTermin 97 471 PhysDevExtTermin 98 472 PhysDevExtTermin 99 473 PhysDevExtTermin 100 474 PhysDevExtTermin 101 475 PhysDevExtTermin 102 476 PhysDevExtTermin 103 477 PhysDevExtTermin 104 478 PhysDevExtTermin 105 479 PhysDevExtTermin 106 480 PhysDevExtTermin 107 481 PhysDevExtTermin 108 482 PhysDevExtTermin 109 483 PhysDevExtTermin 110 484 PhysDevExtTermin 111 485 PhysDevExtTermin 112 486 PhysDevExtTermin 113 487 PhysDevExtTermin 114 488 PhysDevExtTermin 115 489 PhysDevExtTermin 116 490 PhysDevExtTermin 117 491 PhysDevExtTermin 118 492 PhysDevExtTermin 119 493 PhysDevExtTermin 120 494 PhysDevExtTermin 121 495 PhysDevExtTermin 122 496 PhysDevExtTermin 123 497 PhysDevExtTermin 124 498 PhysDevExtTermin 125 499 PhysDevExtTermin 126 500 PhysDevExtTermin 127 501 PhysDevExtTermin 128 502 PhysDevExtTermin 129 503 PhysDevExtTermin 130 504 PhysDevExtTermin 131 505 PhysDevExtTermin 132 506 PhysDevExtTermin 133 507 PhysDevExtTermin 134 508 PhysDevExtTermin 135 509 PhysDevExtTermin 136 510 PhysDevExtTermin 137 511 PhysDevExtTermin 138 512 PhysDevExtTermin 139 513 PhysDevExtTermin 140 514 PhysDevExtTermin 141 515 PhysDevExtTermin 142 516 PhysDevExtTermin 143 517 PhysDevExtTermin 144 518 PhysDevExtTermin 145 519 PhysDevExtTermin 146 520 PhysDevExtTermin 147 521 PhysDevExtTermin 148 522 PhysDevExtTermin 149 523 PhysDevExtTermin 150 524 PhysDevExtTermin 151 525 PhysDevExtTermin 152 526 PhysDevExtTermin 153 527 PhysDevExtTermin 154 528 PhysDevExtTermin 155 529 PhysDevExtTermin 156 530 PhysDevExtTermin 157 531 PhysDevExtTermin 158 532 PhysDevExtTermin 159 533 PhysDevExtTermin 160 534 PhysDevExtTermin 161 535 PhysDevExtTermin 162 536 PhysDevExtTermin 163 537 PhysDevExtTermin 164 538 PhysDevExtTermin 165 539 PhysDevExtTermin 166 540 PhysDevExtTermin 167 541 PhysDevExtTermin 168 542 PhysDevExtTermin 169 543 PhysDevExtTermin 170 544 PhysDevExtTermin 171 545 PhysDevExtTermin 172 546 PhysDevExtTermin 173 547 PhysDevExtTermin 174 548 PhysDevExtTermin 175 549 PhysDevExtTermin 176 550 PhysDevExtTermin 177 551 PhysDevExtTermin 178 552 PhysDevExtTermin 179 553 PhysDevExtTermin 180 554 PhysDevExtTermin 181 555 PhysDevExtTermin 182 556 PhysDevExtTermin 183 557 PhysDevExtTermin 184 558 PhysDevExtTermin 185 559 PhysDevExtTermin 186 560 PhysDevExtTermin 187 561 PhysDevExtTermin 188 562 PhysDevExtTermin 189 563 PhysDevExtTermin 190 564 PhysDevExtTermin 191 565 PhysDevExtTermin 192 566 PhysDevExtTermin 193 567 PhysDevExtTermin 194 568 PhysDevExtTermin 195 569 PhysDevExtTermin 196 570 PhysDevExtTermin 197 571 PhysDevExtTermin 198 572 PhysDevExtTermin 199 573 PhysDevExtTermin 200 574 PhysDevExtTermin 201 575 PhysDevExtTermin 202 576 PhysDevExtTermin 203 577 PhysDevExtTermin 204 578 PhysDevExtTermin 205 579 PhysDevExtTermin 206 580 PhysDevExtTermin 207 581 PhysDevExtTermin 208 582 PhysDevExtTermin 209 583 PhysDevExtTermin 210 584 PhysDevExtTermin 211 585 PhysDevExtTermin 212 586 PhysDevExtTermin 213 587 PhysDevExtTermin 214 588 PhysDevExtTermin 215 589 PhysDevExtTermin 216 590 PhysDevExtTermin 217 591 PhysDevExtTermin 218 592 PhysDevExtTermin 219 593 PhysDevExtTermin 220 594 PhysDevExtTermin 221 595 PhysDevExtTermin 222 596 PhysDevExtTermin 223 597 PhysDevExtTermin 224 598 PhysDevExtTermin 225 599 PhysDevExtTermin 226 600 PhysDevExtTermin 227 601 PhysDevExtTermin 228 602 PhysDevExtTermin 229 603 PhysDevExtTermin 230 604 PhysDevExtTermin 231 605 PhysDevExtTermin 232 606 PhysDevExtTermin 233 607 PhysDevExtTermin 234 608 PhysDevExtTermin 235 609 PhysDevExtTermin 236 610 PhysDevExtTermin 237 611 PhysDevExtTermin 238 612 PhysDevExtTermin 239 613 PhysDevExtTermin 240 614 PhysDevExtTermin 241 615 PhysDevExtTermin 242 616 PhysDevExtTermin 243 617 PhysDevExtTermin 244 618 PhysDevExtTermin 245 619 PhysDevExtTermin 246 620 PhysDevExtTermin 247 621 PhysDevExtTermin 248 622 PhysDevExtTermin 249 623 624 DevExtTramp 0 625 DevExtTramp 1 626 DevExtTramp 2 627 DevExtTramp 3 628 DevExtTramp 4 629 DevExtTramp 5 630 DevExtTramp 6 631 DevExtTramp 7 632 DevExtTramp 8 633 DevExtTramp 9 634 DevExtTramp 10 635 DevExtTramp 11 636 DevExtTramp 12 637 DevExtTramp 13 638 DevExtTramp 14 639 DevExtTramp 15 640 DevExtTramp 16 641 DevExtTramp 17 642 DevExtTramp 18 643 DevExtTramp 19 644 DevExtTramp 20 645 DevExtTramp 21 646 DevExtTramp 22 647 DevExtTramp 23 648 DevExtTramp 24 649 DevExtTramp 25 650 DevExtTramp 26 651 DevExtTramp 27 652 DevExtTramp 28 653 DevExtTramp 29 654 DevExtTramp 30 655 DevExtTramp 31 656 DevExtTramp 32 657 DevExtTramp 33 658 DevExtTramp 34 659 DevExtTramp 35 660 DevExtTramp 36 661 DevExtTramp 37 662 DevExtTramp 38 663 DevExtTramp 39 664 DevExtTramp 40 665 DevExtTramp 41 666 DevExtTramp 42 667 DevExtTramp 43 668 DevExtTramp 44 669 DevExtTramp 45 670 DevExtTramp 46 671 DevExtTramp 47 672 DevExtTramp 48 673 DevExtTramp 49 674 DevExtTramp 50 675 DevExtTramp 51 676 DevExtTramp 52 677 DevExtTramp 53 678 DevExtTramp 54 679 DevExtTramp 55 680 DevExtTramp 56 681 DevExtTramp 57 682 DevExtTramp 58 683 DevExtTramp 59 684 DevExtTramp 60 685 DevExtTramp 61 686 DevExtTramp 62 687 DevExtTramp 63 688 DevExtTramp 64 689 DevExtTramp 65 690 DevExtTramp 66 691 DevExtTramp 67 692 DevExtTramp 68 693 DevExtTramp 69 694 DevExtTramp 70 695 DevExtTramp 71 696 DevExtTramp 72 697 DevExtTramp 73 698 DevExtTramp 74 699 DevExtTramp 75 700 DevExtTramp 76 701 DevExtTramp 77 702 DevExtTramp 78 703 DevExtTramp 79 704 DevExtTramp 80 705 DevExtTramp 81 706 DevExtTramp 82 707 DevExtTramp 83 708 DevExtTramp 84 709 DevExtTramp 85 710 DevExtTramp 86 711 DevExtTramp 87 712 DevExtTramp 88 713 DevExtTramp 89 714 DevExtTramp 90 715 DevExtTramp 91 716 DevExtTramp 92 717 DevExtTramp 93 718 DevExtTramp 94 719 DevExtTramp 95 720 DevExtTramp 96 721 DevExtTramp 97 722 DevExtTramp 98 723 DevExtTramp 99 724 DevExtTramp 100 725 DevExtTramp 101 726 DevExtTramp 102 727 DevExtTramp 103 728 DevExtTramp 104 729 DevExtTramp 105 730 DevExtTramp 106 731 DevExtTramp 107 732 DevExtTramp 108 733 DevExtTramp 109 734 DevExtTramp 110 735 DevExtTramp 111 736 DevExtTramp 112 737 DevExtTramp 113 738 DevExtTramp 114 739 DevExtTramp 115 740 DevExtTramp 116 741 DevExtTramp 117 742 DevExtTramp 118 743 DevExtTramp 119 744 DevExtTramp 120 745 DevExtTramp 121 746 DevExtTramp 122 747 DevExtTramp 123 748 DevExtTramp 124 749 DevExtTramp 125 750 DevExtTramp 126 751 DevExtTramp 127 752 DevExtTramp 128 753 DevExtTramp 129 754 DevExtTramp 130 755 DevExtTramp 131 756 DevExtTramp 132 757 DevExtTramp 133 758 DevExtTramp 134 759 DevExtTramp 135 760 DevExtTramp 136 761 DevExtTramp 137 762 DevExtTramp 138 763 DevExtTramp 139 764 DevExtTramp 140 765 DevExtTramp 141 766 DevExtTramp 142 767 DevExtTramp 143 768 DevExtTramp 144 769 DevExtTramp 145 770 DevExtTramp 146 771 DevExtTramp 147 772 DevExtTramp 148 773 DevExtTramp 149 774 DevExtTramp 150 775 DevExtTramp 151 776 DevExtTramp 152 777 DevExtTramp 153 778 DevExtTramp 154 779 DevExtTramp 155 780 DevExtTramp 156 781 DevExtTramp 157 782 DevExtTramp 158 783 DevExtTramp 159 784 DevExtTramp 160 785 DevExtTramp 161 786 DevExtTramp 162 787 DevExtTramp 163 788 DevExtTramp 164 789 DevExtTramp 165 790 DevExtTramp 166 791 DevExtTramp 167 792 DevExtTramp 168 793 DevExtTramp 169 794 DevExtTramp 170 795 DevExtTramp 171 796 DevExtTramp 172 797 DevExtTramp 173 798 DevExtTramp 174 799 DevExtTramp 175 800 DevExtTramp 176 801 DevExtTramp 177 802 DevExtTramp 178 803 DevExtTramp 179 804 DevExtTramp 180 805 DevExtTramp 181 806 DevExtTramp 182 807 DevExtTramp 183 808 DevExtTramp 184 809 DevExtTramp 185 810 DevExtTramp 186 811 DevExtTramp 187 812 DevExtTramp 188 813 DevExtTramp 189 814 DevExtTramp 190 815 DevExtTramp 191 816 DevExtTramp 192 817 DevExtTramp 193 818 DevExtTramp 194 819 DevExtTramp 195 820 DevExtTramp 196 821 DevExtTramp 197 822 DevExtTramp 198 823 DevExtTramp 199 824 DevExtTramp 200 825 DevExtTramp 201 826 DevExtTramp 202 827 DevExtTramp 203 828 DevExtTramp 204 829 DevExtTramp 205 830 DevExtTramp 206 831 DevExtTramp 207 832 DevExtTramp 208 833 DevExtTramp 209 834 DevExtTramp 210 835 DevExtTramp 211 836 DevExtTramp 212 837 DevExtTramp 213 838 DevExtTramp 214 839 DevExtTramp 215 840 DevExtTramp 216 841 DevExtTramp 217 842 DevExtTramp 218 843 DevExtTramp 219 844 DevExtTramp 220 845 DevExtTramp 221 846 DevExtTramp 222 847 DevExtTramp 223 848 DevExtTramp 224 849 DevExtTramp 225 850 DevExtTramp 226 851 DevExtTramp 227 852 DevExtTramp 228 853 DevExtTramp 229 854 DevExtTramp 230 855 DevExtTramp 231 856 DevExtTramp 232 857 DevExtTramp 233 858 DevExtTramp 234 859 DevExtTramp 235 860 DevExtTramp 236 861 DevExtTramp 237 862 DevExtTramp 238 863 DevExtTramp 239 864 DevExtTramp 240 865 DevExtTramp 241 866 DevExtTramp 242 867 DevExtTramp 243 868 DevExtTramp 244 869 DevExtTramp 245 870 DevExtTramp 246 871 DevExtTramp 247 872 DevExtTramp 248 873 DevExtTramp 249 874