"Fossies" - the Fresh Open Source Software Archive

Member "libressl-2.9.2/crypto/aes/aes-masm-x86_64.S" (21 Jan 2019, 62033 Bytes) of package /linux/misc/libressl-2.9.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PowerPC Assembler source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 OPTION  DOTNAME
    2 #include "x86_arch.h"
    3 
    4 .text$  SEGMENT ALIGN(64) 'CODE'
    5 
    6 ALIGN   16
    7 _x86_64_AES_encrypt PROC PRIVATE
    8     xor eax,DWORD PTR[r15]
    9     xor ebx,DWORD PTR[4+r15]
   10     xor ecx,DWORD PTR[8+r15]
   11     xor edx,DWORD PTR[12+r15]
   12 
   13     mov r13d,DWORD PTR[240+r15]
   14     sub r13d,1
   15     jmp $L$enc_loop
   16 ALIGN   16
   17 $L$enc_loop::
   18 
   19     movzx   esi,al
   20     movzx   edi,bl
   21     movzx   ebp,cl
   22     mov r10d,DWORD PTR[rsi*8+r14]
   23     mov r11d,DWORD PTR[rdi*8+r14]
   24     mov r12d,DWORD PTR[rbp*8+r14]
   25 
   26     movzx   esi,bh
   27     movzx   edi,ch
   28     movzx   ebp,dl
   29     xor r10d,DWORD PTR[3+rsi*8+r14]
   30     xor r11d,DWORD PTR[3+rdi*8+r14]
   31     mov r8d,DWORD PTR[rbp*8+r14]
   32 
   33     movzx   esi,dh
   34     shr ecx,16
   35     movzx   ebp,ah
   36     xor r12d,DWORD PTR[3+rsi*8+r14]
   37     shr edx,16
   38     xor r8d,DWORD PTR[3+rbp*8+r14]
   39 
   40     shr ebx,16
   41     lea r15,QWORD PTR[16+r15]
   42     shr eax,16
   43 
   44     movzx   esi,cl
   45     movzx   edi,dl
   46     movzx   ebp,al
   47     xor r10d,DWORD PTR[2+rsi*8+r14]
   48     xor r11d,DWORD PTR[2+rdi*8+r14]
   49     xor r12d,DWORD PTR[2+rbp*8+r14]
   50 
   51     movzx   esi,dh
   52     movzx   edi,ah
   53     movzx   ebp,bl
   54     xor r10d,DWORD PTR[1+rsi*8+r14]
   55     xor r11d,DWORD PTR[1+rdi*8+r14]
   56     xor r8d,DWORD PTR[2+rbp*8+r14]
   57 
   58     mov edx,DWORD PTR[12+r15]
   59     movzx   edi,bh
   60     movzx   ebp,ch
   61     mov eax,DWORD PTR[r15]
   62     xor r12d,DWORD PTR[1+rdi*8+r14]
   63     xor r8d,DWORD PTR[1+rbp*8+r14]
   64 
   65     mov ebx,DWORD PTR[4+r15]
   66     mov ecx,DWORD PTR[8+r15]
   67     xor eax,r10d
   68     xor ebx,r11d
   69     xor ecx,r12d
   70     xor edx,r8d
   71     sub r13d,1
   72     jnz $L$enc_loop
   73     movzx   esi,al
   74     movzx   edi,bl
   75     movzx   ebp,cl
   76     movzx   r10d,BYTE PTR[2+rsi*8+r14]
   77     movzx   r11d,BYTE PTR[2+rdi*8+r14]
   78     movzx   r12d,BYTE PTR[2+rbp*8+r14]
   79 
   80     movzx   esi,dl
   81     movzx   edi,bh
   82     movzx   ebp,ch
   83     movzx   r8d,BYTE PTR[2+rsi*8+r14]
   84     mov edi,DWORD PTR[rdi*8+r14]
   85     mov ebp,DWORD PTR[rbp*8+r14]
   86 
   87     and edi,00000ff00h
   88     and ebp,00000ff00h
   89 
   90     xor r10d,edi
   91     xor r11d,ebp
   92     shr ecx,16
   93 
   94     movzx   esi,dh
   95     movzx   edi,ah
   96     shr edx,16
   97     mov esi,DWORD PTR[rsi*8+r14]
   98     mov edi,DWORD PTR[rdi*8+r14]
   99 
  100     and esi,00000ff00h
  101     and edi,00000ff00h
  102     shr ebx,16
  103     xor r12d,esi
  104     xor r8d,edi
  105     shr eax,16
  106 
  107     movzx   esi,cl
  108     movzx   edi,dl
  109     movzx   ebp,al
  110     mov esi,DWORD PTR[rsi*8+r14]
  111     mov edi,DWORD PTR[rdi*8+r14]
  112     mov ebp,DWORD PTR[rbp*8+r14]
  113 
  114     and esi,000ff0000h
  115     and edi,000ff0000h
  116     and ebp,000ff0000h
  117 
  118     xor r10d,esi
  119     xor r11d,edi
  120     xor r12d,ebp
  121 
  122     movzx   esi,bl
  123     movzx   edi,dh
  124     movzx   ebp,ah
  125     mov esi,DWORD PTR[rsi*8+r14]
  126     mov edi,DWORD PTR[2+rdi*8+r14]
  127     mov ebp,DWORD PTR[2+rbp*8+r14]
  128 
  129     and esi,000ff0000h
  130     and edi,0ff000000h
  131     and ebp,0ff000000h
  132 
  133     xor r8d,esi
  134     xor r10d,edi
  135     xor r11d,ebp
  136 
  137     movzx   esi,bh
  138     movzx   edi,ch
  139     mov edx,DWORD PTR[((16+12))+r15]
  140     mov esi,DWORD PTR[2+rsi*8+r14]
  141     mov edi,DWORD PTR[2+rdi*8+r14]
  142     mov eax,DWORD PTR[((16+0))+r15]
  143 
  144     and esi,0ff000000h
  145     and edi,0ff000000h
  146 
  147     xor r12d,esi
  148     xor r8d,edi
  149 
  150     mov ebx,DWORD PTR[((16+4))+r15]
  151     mov ecx,DWORD PTR[((16+8))+r15]
  152     xor eax,r10d
  153     xor ebx,r11d
  154     xor ecx,r12d
  155     xor edx,r8d
  156     DB  0F3h,0C3h       ;repret
  157 _x86_64_AES_encrypt ENDP
  158 
  159 ALIGN   16
  160 _x86_64_AES_encrypt_compact PROC PRIVATE
  161     lea r8,QWORD PTR[128+r14]
  162     mov edi,DWORD PTR[((0-128))+r8]
  163     mov ebp,DWORD PTR[((32-128))+r8]
  164     mov r10d,DWORD PTR[((64-128))+r8]
  165     mov r11d,DWORD PTR[((96-128))+r8]
  166     mov edi,DWORD PTR[((128-128))+r8]
  167     mov ebp,DWORD PTR[((160-128))+r8]
  168     mov r10d,DWORD PTR[((192-128))+r8]
  169     mov r11d,DWORD PTR[((224-128))+r8]
  170     jmp $L$enc_loop_compact
  171 ALIGN   16
  172 $L$enc_loop_compact::
  173     xor eax,DWORD PTR[r15]
  174     xor ebx,DWORD PTR[4+r15]
  175     xor ecx,DWORD PTR[8+r15]
  176     xor edx,DWORD PTR[12+r15]
  177     lea r15,QWORD PTR[16+r15]
  178     movzx   r10d,al
  179     movzx   r11d,bl
  180     movzx   r12d,cl
  181     movzx   r10d,BYTE PTR[r10*1+r14]
  182     movzx   r11d,BYTE PTR[r11*1+r14]
  183     movzx   r12d,BYTE PTR[r12*1+r14]
  184 
  185     movzx   r8d,dl
  186     movzx   esi,bh
  187     movzx   edi,ch
  188     movzx   r8d,BYTE PTR[r8*1+r14]
  189     movzx   r9d,BYTE PTR[rsi*1+r14]
  190     movzx   r13d,BYTE PTR[rdi*1+r14]
  191 
  192     movzx   ebp,dh
  193     movzx   esi,ah
  194     shr ecx,16
  195     movzx   ebp,BYTE PTR[rbp*1+r14]
  196     movzx   esi,BYTE PTR[rsi*1+r14]
  197     shr edx,16
  198 
  199     movzx   edi,cl
  200     shl r9d,8
  201     shl r13d,8
  202     movzx   edi,BYTE PTR[rdi*1+r14]
  203     xor r10d,r9d
  204     xor r11d,r13d
  205 
  206     movzx   r9d,dl
  207     shr eax,16
  208     shr ebx,16
  209     movzx   r13d,al
  210     shl ebp,8
  211     shl esi,8
  212     movzx   r9d,BYTE PTR[r9*1+r14]
  213     movzx   r13d,BYTE PTR[r13*1+r14]
  214     xor r12d,ebp
  215     xor r8d,esi
  216 
  217     movzx   ebp,bl
  218     movzx   esi,dh
  219     shl edi,16
  220     movzx   ebp,BYTE PTR[rbp*1+r14]
  221     movzx   esi,BYTE PTR[rsi*1+r14]
  222     xor r10d,edi
  223 
  224     movzx   edi,ah
  225     shr ecx,8
  226     shr ebx,8
  227     movzx   edi,BYTE PTR[rdi*1+r14]
  228     movzx   edx,BYTE PTR[rcx*1+r14]
  229     movzx   ecx,BYTE PTR[rbx*1+r14]
  230     shl r9d,16
  231     shl r13d,16
  232     shl ebp,16
  233     xor r11d,r9d
  234     xor r12d,r13d
  235     xor r8d,ebp
  236 
  237     shl esi,24
  238     shl edi,24
  239     shl edx,24
  240     xor r10d,esi
  241     shl ecx,24
  242     xor r11d,edi
  243     mov eax,r10d
  244     mov ebx,r11d
  245     xor ecx,r12d
  246     xor edx,r8d
  247     cmp r15,QWORD PTR[16+rsp]
  248     je  $L$enc_compact_done
  249     mov esi,eax
  250     mov edi,ebx
  251     and esi,080808080h
  252     and edi,080808080h
  253     mov r10d,esi
  254     mov r11d,edi
  255     shr r10d,7
  256     lea r8d,DWORD PTR[rax*1+rax]
  257     shr r11d,7
  258     lea r9d,DWORD PTR[rbx*1+rbx]
  259     sub esi,r10d
  260     sub edi,r11d
  261     and r8d,0fefefefeh
  262     and r9d,0fefefefeh
  263     and esi,01b1b1b1bh
  264     and edi,01b1b1b1bh
  265     mov r10d,eax
  266     mov r11d,ebx
  267     xor r8d,esi
  268     xor r9d,edi
  269 
  270     xor eax,r8d
  271     xor ebx,r9d
  272     mov esi,ecx
  273     mov edi,edx
  274     rol eax,24
  275     rol ebx,24
  276     and esi,080808080h
  277     and edi,080808080h
  278     xor eax,r8d
  279     xor ebx,r9d
  280     mov r12d,esi
  281     mov ebp,edi
  282     ror r10d,16
  283     ror r11d,16
  284     shr r12d,7
  285     lea r8d,DWORD PTR[rcx*1+rcx]
  286     xor eax,r10d
  287     xor ebx,r11d
  288     shr ebp,7
  289     lea r9d,DWORD PTR[rdx*1+rdx]
  290     ror r10d,8
  291     ror r11d,8
  292     sub esi,r12d
  293     sub edi,ebp
  294     xor eax,r10d
  295     xor ebx,r11d
  296 
  297     and r8d,0fefefefeh
  298     and r9d,0fefefefeh
  299     and esi,01b1b1b1bh
  300     and edi,01b1b1b1bh
  301     mov r12d,ecx
  302     mov ebp,edx
  303     xor r8d,esi
  304     xor r9d,edi
  305 
  306     xor ecx,r8d
  307     xor edx,r9d
  308     rol ecx,24
  309     rol edx,24
  310     xor ecx,r8d
  311     xor edx,r9d
  312     mov esi,DWORD PTR[r14]
  313     ror r12d,16
  314     ror ebp,16
  315     mov edi,DWORD PTR[64+r14]
  316     xor ecx,r12d
  317     xor edx,ebp
  318     mov r8d,DWORD PTR[128+r14]
  319     ror r12d,8
  320     ror ebp,8
  321     mov r9d,DWORD PTR[192+r14]
  322     xor ecx,r12d
  323     xor edx,ebp
  324     jmp $L$enc_loop_compact
  325 ALIGN   16
  326 $L$enc_compact_done::
  327     xor eax,DWORD PTR[r15]
  328     xor ebx,DWORD PTR[4+r15]
  329     xor ecx,DWORD PTR[8+r15]
  330     xor edx,DWORD PTR[12+r15]
  331     DB  0F3h,0C3h       ;repret
  332 _x86_64_AES_encrypt_compact ENDP
  333 PUBLIC  AES_encrypt
  334 
  335 ALIGN   16
  336 PUBLIC  asm_AES_encrypt
  337 
  338 asm_AES_encrypt::
  339 AES_encrypt PROC PUBLIC
  340     mov QWORD PTR[8+rsp],rdi    ;WIN64 prologue
  341     mov QWORD PTR[16+rsp],rsi
  342     mov rax,rsp
  343 $L$SEH_begin_AES_encrypt::
  344     mov rdi,rcx
  345     mov rsi,rdx
  346     mov rdx,r8
  347 
  348 
  349     push    rbx
  350     push    rbp
  351     push    r12
  352     push    r13
  353     push    r14
  354     push    r15
  355 
  356 
  357     mov r10,rsp
  358     lea rcx,QWORD PTR[((-63))+rdx]
  359     and rsp,-64
  360     sub rcx,rsp
  361     neg rcx
  362     and rcx,03c0h
  363     sub rsp,rcx
  364     sub rsp,32
  365 
  366     mov QWORD PTR[16+rsp],rsi
  367     mov QWORD PTR[24+rsp],r10
  368 $L$enc_prologue::
  369 
  370     mov r15,rdx
  371     mov r13d,DWORD PTR[240+r15]
  372 
  373     mov eax,DWORD PTR[rdi]
  374     mov ebx,DWORD PTR[4+rdi]
  375     mov ecx,DWORD PTR[8+rdi]
  376     mov edx,DWORD PTR[12+rdi]
  377 
  378     shl r13d,4
  379     lea rbp,QWORD PTR[r13*1+r15]
  380     mov QWORD PTR[rsp],r15
  381     mov QWORD PTR[8+rsp],rbp
  382 
  383 
  384     lea r14,QWORD PTR[(($L$AES_Te+2048))]
  385     lea rbp,QWORD PTR[768+rsp]
  386     sub rbp,r14
  387     and rbp,0300h
  388     lea r14,QWORD PTR[rbp*1+r14]
  389 
  390     call    _x86_64_AES_encrypt_compact
  391 
  392     mov r9,QWORD PTR[16+rsp]
  393     mov rsi,QWORD PTR[24+rsp]
  394     mov DWORD PTR[r9],eax
  395     mov DWORD PTR[4+r9],ebx
  396     mov DWORD PTR[8+r9],ecx
  397     mov DWORD PTR[12+r9],edx
  398 
  399     mov r15,QWORD PTR[rsi]
  400     mov r14,QWORD PTR[8+rsi]
  401     mov r13,QWORD PTR[16+rsi]
  402     mov r12,QWORD PTR[24+rsi]
  403     mov rbp,QWORD PTR[32+rsi]
  404     mov rbx,QWORD PTR[40+rsi]
  405     lea rsp,QWORD PTR[48+rsi]
  406 $L$enc_epilogue::
  407     mov rdi,QWORD PTR[8+rsp]    ;WIN64 epilogue
  408     mov rsi,QWORD PTR[16+rsp]
  409     DB  0F3h,0C3h       ;repret
  410 $L$SEH_end_AES_encrypt::
  411 AES_encrypt ENDP
  412 
  413 ALIGN   16
  414 _x86_64_AES_decrypt PROC PRIVATE
  415     xor eax,DWORD PTR[r15]
  416     xor ebx,DWORD PTR[4+r15]
  417     xor ecx,DWORD PTR[8+r15]
  418     xor edx,DWORD PTR[12+r15]
  419 
  420     mov r13d,DWORD PTR[240+r15]
  421     sub r13d,1
  422     jmp $L$dec_loop
  423 ALIGN   16
  424 $L$dec_loop::
  425 
  426     movzx   esi,al
  427     movzx   edi,bl
  428     movzx   ebp,cl
  429     mov r10d,DWORD PTR[rsi*8+r14]
  430     mov r11d,DWORD PTR[rdi*8+r14]
  431     mov r12d,DWORD PTR[rbp*8+r14]
  432 
  433     movzx   esi,dh
  434     movzx   edi,ah
  435     movzx   ebp,dl
  436     xor r10d,DWORD PTR[3+rsi*8+r14]
  437     xor r11d,DWORD PTR[3+rdi*8+r14]
  438     mov r8d,DWORD PTR[rbp*8+r14]
  439 
  440     movzx   esi,bh
  441     shr eax,16
  442     movzx   ebp,ch
  443     xor r12d,DWORD PTR[3+rsi*8+r14]
  444     shr edx,16
  445     xor r8d,DWORD PTR[3+rbp*8+r14]
  446 
  447     shr ebx,16
  448     lea r15,QWORD PTR[16+r15]
  449     shr ecx,16
  450 
  451     movzx   esi,cl
  452     movzx   edi,dl
  453     movzx   ebp,al
  454     xor r10d,DWORD PTR[2+rsi*8+r14]
  455     xor r11d,DWORD PTR[2+rdi*8+r14]
  456     xor r12d,DWORD PTR[2+rbp*8+r14]
  457 
  458     movzx   esi,bh
  459     movzx   edi,ch
  460     movzx   ebp,bl
  461     xor r10d,DWORD PTR[1+rsi*8+r14]
  462     xor r11d,DWORD PTR[1+rdi*8+r14]
  463     xor r8d,DWORD PTR[2+rbp*8+r14]
  464 
  465     movzx   esi,dh
  466     mov edx,DWORD PTR[12+r15]
  467     movzx   ebp,ah
  468     xor r12d,DWORD PTR[1+rsi*8+r14]
  469     mov eax,DWORD PTR[r15]
  470     xor r8d,DWORD PTR[1+rbp*8+r14]
  471 
  472     xor eax,r10d
  473     mov ebx,DWORD PTR[4+r15]
  474     mov ecx,DWORD PTR[8+r15]
  475     xor ecx,r12d
  476     xor ebx,r11d
  477     xor edx,r8d
  478     sub r13d,1
  479     jnz $L$dec_loop
  480     lea r14,QWORD PTR[2048+r14]
  481     movzx   esi,al
  482     movzx   edi,bl
  483     movzx   ebp,cl
  484     movzx   r10d,BYTE PTR[rsi*1+r14]
  485     movzx   r11d,BYTE PTR[rdi*1+r14]
  486     movzx   r12d,BYTE PTR[rbp*1+r14]
  487 
  488     movzx   esi,dl
  489     movzx   edi,dh
  490     movzx   ebp,ah
  491     movzx   r8d,BYTE PTR[rsi*1+r14]
  492     movzx   edi,BYTE PTR[rdi*1+r14]
  493     movzx   ebp,BYTE PTR[rbp*1+r14]
  494 
  495     shl edi,8
  496     shl ebp,8
  497 
  498     xor r10d,edi
  499     xor r11d,ebp
  500     shr edx,16
  501 
  502     movzx   esi,bh
  503     movzx   edi,ch
  504     shr eax,16
  505     movzx   esi,BYTE PTR[rsi*1+r14]
  506     movzx   edi,BYTE PTR[rdi*1+r14]
  507 
  508     shl esi,8
  509     shl edi,8
  510     shr ebx,16
  511     xor r12d,esi
  512     xor r8d,edi
  513     shr ecx,16
  514 
  515     movzx   esi,cl
  516     movzx   edi,dl
  517     movzx   ebp,al
  518     movzx   esi,BYTE PTR[rsi*1+r14]
  519     movzx   edi,BYTE PTR[rdi*1+r14]
  520     movzx   ebp,BYTE PTR[rbp*1+r14]
  521 
  522     shl esi,16
  523     shl edi,16
  524     shl ebp,16
  525 
  526     xor r10d,esi
  527     xor r11d,edi
  528     xor r12d,ebp
  529 
  530     movzx   esi,bl
  531     movzx   edi,bh
  532     movzx   ebp,ch
  533     movzx   esi,BYTE PTR[rsi*1+r14]
  534     movzx   edi,BYTE PTR[rdi*1+r14]
  535     movzx   ebp,BYTE PTR[rbp*1+r14]
  536 
  537     shl esi,16
  538     shl edi,24
  539     shl ebp,24
  540 
  541     xor r8d,esi
  542     xor r10d,edi
  543     xor r11d,ebp
  544 
  545     movzx   esi,dh
  546     movzx   edi,ah
  547     mov edx,DWORD PTR[((16+12))+r15]
  548     movzx   esi,BYTE PTR[rsi*1+r14]
  549     movzx   edi,BYTE PTR[rdi*1+r14]
  550     mov eax,DWORD PTR[((16+0))+r15]
  551 
  552     shl esi,24
  553     shl edi,24
  554 
  555     xor r12d,esi
  556     xor r8d,edi
  557 
  558     mov ebx,DWORD PTR[((16+4))+r15]
  559     mov ecx,DWORD PTR[((16+8))+r15]
  560     lea r14,QWORD PTR[((-2048))+r14]
  561     xor eax,r10d
  562     xor ebx,r11d
  563     xor ecx,r12d
  564     xor edx,r8d
  565     DB  0F3h,0C3h       ;repret
  566 _x86_64_AES_decrypt ENDP
  567 
  568 ALIGN   16
  569 _x86_64_AES_decrypt_compact PROC PRIVATE
  570     lea r8,QWORD PTR[128+r14]
  571     mov edi,DWORD PTR[((0-128))+r8]
  572     mov ebp,DWORD PTR[((32-128))+r8]
  573     mov r10d,DWORD PTR[((64-128))+r8]
  574     mov r11d,DWORD PTR[((96-128))+r8]
  575     mov edi,DWORD PTR[((128-128))+r8]
  576     mov ebp,DWORD PTR[((160-128))+r8]
  577     mov r10d,DWORD PTR[((192-128))+r8]
  578     mov r11d,DWORD PTR[((224-128))+r8]
  579     jmp $L$dec_loop_compact
  580 
  581 ALIGN   16
  582 $L$dec_loop_compact::
  583     xor eax,DWORD PTR[r15]
  584     xor ebx,DWORD PTR[4+r15]
  585     xor ecx,DWORD PTR[8+r15]
  586     xor edx,DWORD PTR[12+r15]
  587     lea r15,QWORD PTR[16+r15]
  588     movzx   r10d,al
  589     movzx   r11d,bl
  590     movzx   r12d,cl
  591     movzx   r10d,BYTE PTR[r10*1+r14]
  592     movzx   r11d,BYTE PTR[r11*1+r14]
  593     movzx   r12d,BYTE PTR[r12*1+r14]
  594 
  595     movzx   r8d,dl
  596     movzx   esi,dh
  597     movzx   edi,ah
  598     movzx   r8d,BYTE PTR[r8*1+r14]
  599     movzx   r9d,BYTE PTR[rsi*1+r14]
  600     movzx   r13d,BYTE PTR[rdi*1+r14]
  601 
  602     movzx   ebp,bh
  603     movzx   esi,ch
  604     shr ecx,16
  605     movzx   ebp,BYTE PTR[rbp*1+r14]
  606     movzx   esi,BYTE PTR[rsi*1+r14]
  607     shr edx,16
  608 
  609     movzx   edi,cl
  610     shl r9d,8
  611     shl r13d,8
  612     movzx   edi,BYTE PTR[rdi*1+r14]
  613     xor r10d,r9d
  614     xor r11d,r13d
  615 
  616     movzx   r9d,dl
  617     shr eax,16
  618     shr ebx,16
  619     movzx   r13d,al
  620     shl ebp,8
  621     shl esi,8
  622     movzx   r9d,BYTE PTR[r9*1+r14]
  623     movzx   r13d,BYTE PTR[r13*1+r14]
  624     xor r12d,ebp
  625     xor r8d,esi
  626 
  627     movzx   ebp,bl
  628     movzx   esi,bh
  629     shl edi,16
  630     movzx   ebp,BYTE PTR[rbp*1+r14]
  631     movzx   esi,BYTE PTR[rsi*1+r14]
  632     xor r10d,edi
  633 
  634     movzx   edi,ch
  635     shl r9d,16
  636     shl r13d,16
  637     movzx   ebx,BYTE PTR[rdi*1+r14]
  638     xor r11d,r9d
  639     xor r12d,r13d
  640 
  641     movzx   edi,dh
  642     shr eax,8
  643     shl ebp,16
  644     movzx   ecx,BYTE PTR[rdi*1+r14]
  645     movzx   edx,BYTE PTR[rax*1+r14]
  646     xor r8d,ebp
  647 
  648     shl esi,24
  649     shl ebx,24
  650     shl ecx,24
  651     xor r10d,esi
  652     shl edx,24
  653     xor ebx,r11d
  654     mov eax,r10d
  655     xor ecx,r12d
  656     xor edx,r8d
  657     cmp r15,QWORD PTR[16+rsp]
  658     je  $L$dec_compact_done
  659 
  660     mov rsi,QWORD PTR[((256+0))+r14]
  661     shl rbx,32
  662     shl rdx,32
  663     mov rdi,QWORD PTR[((256+8))+r14]
  664     or  rax,rbx
  665     or  rcx,rdx
  666     mov rbp,QWORD PTR[((256+16))+r14]
  667     mov rbx,rax
  668     mov rdx,rcx
  669     and rbx,rsi
  670     and rdx,rsi
  671     mov r9,rbx
  672     mov r12,rdx
  673     shr r9,7
  674     lea r8,QWORD PTR[rax*1+rax]
  675     shr r12,7
  676     lea r11,QWORD PTR[rcx*1+rcx]
  677     sub rbx,r9
  678     sub rdx,r12
  679     and r8,rdi
  680     and r11,rdi
  681     and rbx,rbp
  682     and rdx,rbp
  683     xor rbx,r8
  684     xor rdx,r11
  685     mov r8,rbx
  686     mov r11,rdx
  687 
  688     and rbx,rsi
  689     and rdx,rsi
  690     mov r10,rbx
  691     mov r13,rdx
  692     shr r10,7
  693     lea r9,QWORD PTR[r8*1+r8]
  694     shr r13,7
  695     lea r12,QWORD PTR[r11*1+r11]
  696     sub rbx,r10
  697     sub rdx,r13
  698     and r9,rdi
  699     and r12,rdi
  700     and rbx,rbp
  701     and rdx,rbp
  702     xor rbx,r9
  703     xor rdx,r12
  704     mov r9,rbx
  705     mov r12,rdx
  706 
  707     and rbx,rsi
  708     and rdx,rsi
  709     mov r10,rbx
  710     mov r13,rdx
  711     shr r10,7
  712     xor r8,rax
  713     shr r13,7
  714     xor r11,rcx
  715     sub rbx,r10
  716     sub rdx,r13
  717     lea r10,QWORD PTR[r9*1+r9]
  718     lea r13,QWORD PTR[r12*1+r12]
  719     xor r9,rax
  720     xor r12,rcx
  721     and r10,rdi
  722     and r13,rdi
  723     and rbx,rbp
  724     and rdx,rbp
  725     xor r10,rbx
  726     xor r13,rdx
  727 
  728     xor rax,r10
  729     xor rcx,r13
  730     xor r8,r10
  731     xor r11,r13
  732     mov rbx,rax
  733     mov rdx,rcx
  734     xor r9,r10
  735     xor r12,r13
  736     shr rbx,32
  737     shr rdx,32
  738     xor r10,r8
  739     xor r13,r11
  740     rol eax,8
  741     rol ecx,8
  742     xor r10,r9
  743     xor r13,r12
  744 
  745     rol ebx,8
  746     rol edx,8
  747     xor eax,r10d
  748     xor ecx,r13d
  749     shr r10,32
  750     shr r13,32
  751     xor ebx,r10d
  752     xor edx,r13d
  753 
  754     mov r10,r8
  755     mov r13,r11
  756     shr r10,32
  757     shr r13,32
  758     rol r8d,24
  759     rol r11d,24
  760     rol r10d,24
  761     rol r13d,24
  762     xor eax,r8d
  763     xor ecx,r11d
  764     mov r8,r9
  765     mov r11,r12
  766     xor ebx,r10d
  767     xor edx,r13d
  768 
  769     mov rsi,QWORD PTR[r14]
  770     shr r8,32
  771     shr r11,32
  772     mov rdi,QWORD PTR[64+r14]
  773     rol r9d,16
  774     rol r12d,16
  775     mov rbp,QWORD PTR[128+r14]
  776     rol r8d,16
  777     rol r11d,16
  778     mov r10,QWORD PTR[192+r14]
  779     xor eax,r9d
  780     xor ecx,r12d
  781     mov r13,QWORD PTR[256+r14]
  782     xor ebx,r8d
  783     xor edx,r11d
  784     jmp $L$dec_loop_compact
  785 ALIGN   16
  786 $L$dec_compact_done::
  787     xor eax,DWORD PTR[r15]
  788     xor ebx,DWORD PTR[4+r15]
  789     xor ecx,DWORD PTR[8+r15]
  790     xor edx,DWORD PTR[12+r15]
  791     DB  0F3h,0C3h       ;repret
  792 _x86_64_AES_decrypt_compact ENDP
  793 PUBLIC  AES_decrypt
  794 
  795 ALIGN   16
  796 PUBLIC  asm_AES_decrypt
  797 
  798 asm_AES_decrypt::
  799 AES_decrypt PROC PUBLIC
  800     mov QWORD PTR[8+rsp],rdi    ;WIN64 prologue
  801     mov QWORD PTR[16+rsp],rsi
  802     mov rax,rsp
  803 $L$SEH_begin_AES_decrypt::
  804     mov rdi,rcx
  805     mov rsi,rdx
  806     mov rdx,r8
  807 
  808 
  809     push    rbx
  810     push    rbp
  811     push    r12
  812     push    r13
  813     push    r14
  814     push    r15
  815 
  816 
  817     mov r10,rsp
  818     lea rcx,QWORD PTR[((-63))+rdx]
  819     and rsp,-64
  820     sub rcx,rsp
  821     neg rcx
  822     and rcx,03c0h
  823     sub rsp,rcx
  824     sub rsp,32
  825 
  826     mov QWORD PTR[16+rsp],rsi
  827     mov QWORD PTR[24+rsp],r10
  828 $L$dec_prologue::
  829 
  830     mov r15,rdx
  831     mov r13d,DWORD PTR[240+r15]
  832 
  833     mov eax,DWORD PTR[rdi]
  834     mov ebx,DWORD PTR[4+rdi]
  835     mov ecx,DWORD PTR[8+rdi]
  836     mov edx,DWORD PTR[12+rdi]
  837 
  838     shl r13d,4
  839     lea rbp,QWORD PTR[r13*1+r15]
  840     mov QWORD PTR[rsp],r15
  841     mov QWORD PTR[8+rsp],rbp
  842 
  843 
  844     lea r14,QWORD PTR[(($L$AES_Td+2048))]
  845     lea rbp,QWORD PTR[768+rsp]
  846     sub rbp,r14
  847     and rbp,0300h
  848     lea r14,QWORD PTR[rbp*1+r14]
  849     shr rbp,3
  850     add r14,rbp
  851 
  852     call    _x86_64_AES_decrypt_compact
  853 
  854     mov r9,QWORD PTR[16+rsp]
  855     mov rsi,QWORD PTR[24+rsp]
  856     mov DWORD PTR[r9],eax
  857     mov DWORD PTR[4+r9],ebx
  858     mov DWORD PTR[8+r9],ecx
  859     mov DWORD PTR[12+r9],edx
  860 
  861     mov r15,QWORD PTR[rsi]
  862     mov r14,QWORD PTR[8+rsi]
  863     mov r13,QWORD PTR[16+rsi]
  864     mov r12,QWORD PTR[24+rsi]
  865     mov rbp,QWORD PTR[32+rsi]
  866     mov rbx,QWORD PTR[40+rsi]
  867     lea rsp,QWORD PTR[48+rsi]
  868 $L$dec_epilogue::
  869     mov rdi,QWORD PTR[8+rsp]    ;WIN64 epilogue
  870     mov rsi,QWORD PTR[16+rsp]
  871     DB  0F3h,0C3h       ;repret
  872 $L$SEH_end_AES_decrypt::
  873 AES_decrypt ENDP
  874 PUBLIC  AES_set_encrypt_key
  875 
  876 ALIGN   16
  877 AES_set_encrypt_key PROC PUBLIC
  878     mov QWORD PTR[8+rsp],rdi    ;WIN64 prologue
  879     mov QWORD PTR[16+rsp],rsi
  880     mov rax,rsp
  881 $L$SEH_begin_AES_set_encrypt_key::
  882     mov rdi,rcx
  883     mov rsi,rdx
  884     mov rdx,r8
  885 
  886 
  887     push    rbx
  888     push    rbp
  889     push    r12
  890     push    r13
  891     push    r14
  892     push    r15
  893     sub rsp,8
  894 $L$enc_key_prologue::
  895 
  896     call    _x86_64_AES_set_encrypt_key
  897 
  898     mov r15,QWORD PTR[8+rsp]
  899     mov r14,QWORD PTR[16+rsp]
  900     mov r13,QWORD PTR[24+rsp]
  901     mov r12,QWORD PTR[32+rsp]
  902     mov rbp,QWORD PTR[40+rsp]
  903     mov rbx,QWORD PTR[48+rsp]
  904     add rsp,56
  905 $L$enc_key_epilogue::
  906     mov rdi,QWORD PTR[8+rsp]    ;WIN64 epilogue
  907     mov rsi,QWORD PTR[16+rsp]
  908     DB  0F3h,0C3h       ;repret
  909 $L$SEH_end_AES_set_encrypt_key::
  910 AES_set_encrypt_key ENDP
  911 
  912 
  913 ALIGN   16
  914 _x86_64_AES_set_encrypt_key PROC PRIVATE
  915     mov ecx,esi
  916     mov rsi,rdi
  917     mov rdi,rdx
  918 
  919     test    rsi,-1
  920     jz  $L$badpointer
  921     test    rdi,-1
  922     jz  $L$badpointer
  923 
  924     lea rbp,QWORD PTR[$L$AES_Te]
  925     lea rbp,QWORD PTR[((2048+128))+rbp]
  926 
  927 
  928     mov eax,DWORD PTR[((0-128))+rbp]
  929     mov ebx,DWORD PTR[((32-128))+rbp]
  930     mov r8d,DWORD PTR[((64-128))+rbp]
  931     mov edx,DWORD PTR[((96-128))+rbp]
  932     mov eax,DWORD PTR[((128-128))+rbp]
  933     mov ebx,DWORD PTR[((160-128))+rbp]
  934     mov r8d,DWORD PTR[((192-128))+rbp]
  935     mov edx,DWORD PTR[((224-128))+rbp]
  936 
  937     cmp ecx,128
  938     je  $L$10rounds
  939     cmp ecx,192
  940     je  $L$12rounds
  941     cmp ecx,256
  942     je  $L$14rounds
  943     mov rax,-2
  944     jmp $L$exit
  945 
  946 $L$10rounds::
  947     mov rax,QWORD PTR[rsi]
  948     mov rdx,QWORD PTR[8+rsi]
  949     mov QWORD PTR[rdi],rax
  950     mov QWORD PTR[8+rdi],rdx
  951 
  952     shr rdx,32
  953     xor ecx,ecx
  954     jmp $L$10shortcut
  955 ALIGN   4
  956 $L$10loop::
  957     mov eax,DWORD PTR[rdi]
  958     mov edx,DWORD PTR[12+rdi]
  959 $L$10shortcut::
  960     movzx   esi,dl
  961     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
  962     movzx   esi,dh
  963     shl ebx,24
  964     xor eax,ebx
  965 
  966     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
  967     shr edx,16
  968     movzx   esi,dl
  969     xor eax,ebx
  970 
  971     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
  972     movzx   esi,dh
  973     shl ebx,8
  974     xor eax,ebx
  975 
  976     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
  977     shl ebx,16
  978     xor eax,ebx
  979 
  980     xor eax,DWORD PTR[((1024-128))+rcx*4+rbp]
  981     mov DWORD PTR[16+rdi],eax
  982     xor eax,DWORD PTR[4+rdi]
  983     mov DWORD PTR[20+rdi],eax
  984     xor eax,DWORD PTR[8+rdi]
  985     mov DWORD PTR[24+rdi],eax
  986     xor eax,DWORD PTR[12+rdi]
  987     mov DWORD PTR[28+rdi],eax
  988     add ecx,1
  989     lea rdi,QWORD PTR[16+rdi]
  990     cmp ecx,10
  991     jl  $L$10loop
  992 
  993     mov DWORD PTR[80+rdi],10
  994     xor rax,rax
  995     jmp $L$exit
  996 
  997 $L$12rounds::
  998     mov rax,QWORD PTR[rsi]
  999     mov rbx,QWORD PTR[8+rsi]
 1000     mov rdx,QWORD PTR[16+rsi]
 1001     mov QWORD PTR[rdi],rax
 1002     mov QWORD PTR[8+rdi],rbx
 1003     mov QWORD PTR[16+rdi],rdx
 1004 
 1005     shr rdx,32
 1006     xor ecx,ecx
 1007     jmp $L$12shortcut
 1008 ALIGN   4
 1009 $L$12loop::
 1010     mov eax,DWORD PTR[rdi]
 1011     mov edx,DWORD PTR[20+rdi]
 1012 $L$12shortcut::
 1013     movzx   esi,dl
 1014     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1015     movzx   esi,dh
 1016     shl ebx,24
 1017     xor eax,ebx
 1018 
 1019     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1020     shr edx,16
 1021     movzx   esi,dl
 1022     xor eax,ebx
 1023 
 1024     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1025     movzx   esi,dh
 1026     shl ebx,8
 1027     xor eax,ebx
 1028 
 1029     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1030     shl ebx,16
 1031     xor eax,ebx
 1032 
 1033     xor eax,DWORD PTR[((1024-128))+rcx*4+rbp]
 1034     mov DWORD PTR[24+rdi],eax
 1035     xor eax,DWORD PTR[4+rdi]
 1036     mov DWORD PTR[28+rdi],eax
 1037     xor eax,DWORD PTR[8+rdi]
 1038     mov DWORD PTR[32+rdi],eax
 1039     xor eax,DWORD PTR[12+rdi]
 1040     mov DWORD PTR[36+rdi],eax
 1041 
 1042     cmp ecx,7
 1043     je  $L$12break
 1044     add ecx,1
 1045 
 1046     xor eax,DWORD PTR[16+rdi]
 1047     mov DWORD PTR[40+rdi],eax
 1048     xor eax,DWORD PTR[20+rdi]
 1049     mov DWORD PTR[44+rdi],eax
 1050 
 1051     lea rdi,QWORD PTR[24+rdi]
 1052     jmp $L$12loop
 1053 $L$12break::
 1054     mov DWORD PTR[72+rdi],12
 1055     xor rax,rax
 1056     jmp $L$exit
 1057 
 1058 $L$14rounds::
 1059     mov rax,QWORD PTR[rsi]
 1060     mov rbx,QWORD PTR[8+rsi]
 1061     mov rcx,QWORD PTR[16+rsi]
 1062     mov rdx,QWORD PTR[24+rsi]
 1063     mov QWORD PTR[rdi],rax
 1064     mov QWORD PTR[8+rdi],rbx
 1065     mov QWORD PTR[16+rdi],rcx
 1066     mov QWORD PTR[24+rdi],rdx
 1067 
 1068     shr rdx,32
 1069     xor ecx,ecx
 1070     jmp $L$14shortcut
 1071 ALIGN   4
 1072 $L$14loop::
 1073     mov eax,DWORD PTR[rdi]
 1074     mov edx,DWORD PTR[28+rdi]
 1075 $L$14shortcut::
 1076     movzx   esi,dl
 1077     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1078     movzx   esi,dh
 1079     shl ebx,24
 1080     xor eax,ebx
 1081 
 1082     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1083     shr edx,16
 1084     movzx   esi,dl
 1085     xor eax,ebx
 1086 
 1087     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1088     movzx   esi,dh
 1089     shl ebx,8
 1090     xor eax,ebx
 1091 
 1092     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1093     shl ebx,16
 1094     xor eax,ebx
 1095 
 1096     xor eax,DWORD PTR[((1024-128))+rcx*4+rbp]
 1097     mov DWORD PTR[32+rdi],eax
 1098     xor eax,DWORD PTR[4+rdi]
 1099     mov DWORD PTR[36+rdi],eax
 1100     xor eax,DWORD PTR[8+rdi]
 1101     mov DWORD PTR[40+rdi],eax
 1102     xor eax,DWORD PTR[12+rdi]
 1103     mov DWORD PTR[44+rdi],eax
 1104 
 1105     cmp ecx,6
 1106     je  $L$14break
 1107     add ecx,1
 1108 
 1109     mov edx,eax
 1110     mov eax,DWORD PTR[16+rdi]
 1111     movzx   esi,dl
 1112     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1113     movzx   esi,dh
 1114     xor eax,ebx
 1115 
 1116     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1117     shr edx,16
 1118     shl ebx,8
 1119     movzx   esi,dl
 1120     xor eax,ebx
 1121 
 1122     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1123     movzx   esi,dh
 1124     shl ebx,16
 1125     xor eax,ebx
 1126 
 1127     movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
 1128     shl ebx,24
 1129     xor eax,ebx
 1130 
 1131     mov DWORD PTR[48+rdi],eax
 1132     xor eax,DWORD PTR[20+rdi]
 1133     mov DWORD PTR[52+rdi],eax
 1134     xor eax,DWORD PTR[24+rdi]
 1135     mov DWORD PTR[56+rdi],eax
 1136     xor eax,DWORD PTR[28+rdi]
 1137     mov DWORD PTR[60+rdi],eax
 1138 
 1139     lea rdi,QWORD PTR[32+rdi]
 1140     jmp $L$14loop
 1141 $L$14break::
 1142     mov DWORD PTR[48+rdi],14
 1143     xor rax,rax
 1144     jmp $L$exit
 1145 
 1146 $L$badpointer::
 1147     mov rax,-1
 1148 $L$exit::
 1149     DB  0F3h,0C3h       ;repret
 1150 _x86_64_AES_set_encrypt_key ENDP
 1151 PUBLIC  AES_set_decrypt_key
 1152 
 1153 ALIGN   16
 1154 AES_set_decrypt_key PROC PUBLIC
 1155     mov QWORD PTR[8+rsp],rdi    ;WIN64 prologue
 1156     mov QWORD PTR[16+rsp],rsi
 1157     mov rax,rsp
 1158 $L$SEH_begin_AES_set_decrypt_key::
 1159     mov rdi,rcx
 1160     mov rsi,rdx
 1161     mov rdx,r8
 1162 
 1163 
 1164     push    rbx
 1165     push    rbp
 1166     push    r12
 1167     push    r13
 1168     push    r14
 1169     push    r15
 1170     push    rdx
 1171 $L$dec_key_prologue::
 1172 
 1173     call    _x86_64_AES_set_encrypt_key
 1174     mov r8,QWORD PTR[rsp]
 1175     cmp eax,0
 1176     jne $L$abort
 1177 
 1178     mov r14d,DWORD PTR[240+r8]
 1179     xor rdi,rdi
 1180     lea rcx,QWORD PTR[r14*4+rdi]
 1181     mov rsi,r8
 1182     lea rdi,QWORD PTR[rcx*4+r8]
 1183 ALIGN   4
 1184 $L$invert::
 1185     mov rax,QWORD PTR[rsi]
 1186     mov rbx,QWORD PTR[8+rsi]
 1187     mov rcx,QWORD PTR[rdi]
 1188     mov rdx,QWORD PTR[8+rdi]
 1189     mov QWORD PTR[rdi],rax
 1190     mov QWORD PTR[8+rdi],rbx
 1191     mov QWORD PTR[rsi],rcx
 1192     mov QWORD PTR[8+rsi],rdx
 1193     lea rsi,QWORD PTR[16+rsi]
 1194     lea rdi,QWORD PTR[((-16))+rdi]
 1195     cmp rdi,rsi
 1196     jne $L$invert
 1197 
 1198     lea rax,QWORD PTR[(($L$AES_Te+2048+1024))]
 1199 
 1200     mov rsi,QWORD PTR[40+rax]
 1201     mov rdi,QWORD PTR[48+rax]
 1202     mov rbp,QWORD PTR[56+rax]
 1203 
 1204     mov r15,r8
 1205     sub r14d,1
 1206 ALIGN   4
 1207 $L$permute::
 1208     lea r15,QWORD PTR[16+r15]
 1209     mov rax,QWORD PTR[r15]
 1210     mov rcx,QWORD PTR[8+r15]
 1211     mov rbx,rax
 1212     mov rdx,rcx
 1213     and rbx,rsi
 1214     and rdx,rsi
 1215     mov r9,rbx
 1216     mov r12,rdx
 1217     shr r9,7
 1218     lea r8,QWORD PTR[rax*1+rax]
 1219     shr r12,7
 1220     lea r11,QWORD PTR[rcx*1+rcx]
 1221     sub rbx,r9
 1222     sub rdx,r12
 1223     and r8,rdi
 1224     and r11,rdi
 1225     and rbx,rbp
 1226     and rdx,rbp
 1227     xor rbx,r8
 1228     xor rdx,r11
 1229     mov r8,rbx
 1230     mov r11,rdx
 1231 
 1232     and rbx,rsi
 1233     and rdx,rsi
 1234     mov r10,rbx
 1235     mov r13,rdx
 1236     shr r10,7
 1237     lea r9,QWORD PTR[r8*1+r8]
 1238     shr r13,7
 1239     lea r12,QWORD PTR[r11*1+r11]
 1240     sub rbx,r10
 1241     sub rdx,r13
 1242     and r9,rdi
 1243     and r12,rdi
 1244     and rbx,rbp
 1245     and rdx,rbp
 1246     xor rbx,r9
 1247     xor rdx,r12
 1248     mov r9,rbx
 1249     mov r12,rdx
 1250 
 1251     and rbx,rsi
 1252     and rdx,rsi
 1253     mov r10,rbx
 1254     mov r13,rdx
 1255     shr r10,7
 1256     xor r8,rax
 1257     shr r13,7
 1258     xor r11,rcx
 1259     sub rbx,r10
 1260     sub rdx,r13
 1261     lea r10,QWORD PTR[r9*1+r9]
 1262     lea r13,QWORD PTR[r12*1+r12]
 1263     xor r9,rax
 1264     xor r12,rcx
 1265     and r10,rdi
 1266     and r13,rdi
 1267     and rbx,rbp
 1268     and rdx,rbp
 1269     xor r10,rbx
 1270     xor r13,rdx
 1271 
 1272     xor rax,r10
 1273     xor rcx,r13
 1274     xor r8,r10
 1275     xor r11,r13
 1276     mov rbx,rax
 1277     mov rdx,rcx
 1278     xor r9,r10
 1279     xor r12,r13
 1280     shr rbx,32
 1281     shr rdx,32
 1282     xor r10,r8
 1283     xor r13,r11
 1284     rol eax,8
 1285     rol ecx,8
 1286     xor r10,r9
 1287     xor r13,r12
 1288 
 1289     rol ebx,8
 1290     rol edx,8
 1291     xor eax,r10d
 1292     xor ecx,r13d
 1293     shr r10,32
 1294     shr r13,32
 1295     xor ebx,r10d
 1296     xor edx,r13d
 1297 
 1298     mov r10,r8
 1299     mov r13,r11
 1300     shr r10,32
 1301     shr r13,32
 1302     rol r8d,24
 1303     rol r11d,24
 1304     rol r10d,24
 1305     rol r13d,24
 1306     xor eax,r8d
 1307     xor ecx,r11d
 1308     mov r8,r9
 1309     mov r11,r12
 1310     xor ebx,r10d
 1311     xor edx,r13d
 1312 
 1313 
 1314     shr r8,32
 1315     shr r11,32
 1316 
 1317     rol r9d,16
 1318     rol r12d,16
 1319 
 1320     rol r8d,16
 1321     rol r11d,16
 1322 
 1323     xor eax,r9d
 1324     xor ecx,r12d
 1325 
 1326     xor ebx,r8d
 1327     xor edx,r11d
 1328     mov DWORD PTR[r15],eax
 1329     mov DWORD PTR[4+r15],ebx
 1330     mov DWORD PTR[8+r15],ecx
 1331     mov DWORD PTR[12+r15],edx
 1332     sub r14d,1
 1333     jnz $L$permute
 1334 
 1335     xor rax,rax
 1336 $L$abort::
 1337     mov r15,QWORD PTR[8+rsp]
 1338     mov r14,QWORD PTR[16+rsp]
 1339     mov r13,QWORD PTR[24+rsp]
 1340     mov r12,QWORD PTR[32+rsp]
 1341     mov rbp,QWORD PTR[40+rsp]
 1342     mov rbx,QWORD PTR[48+rsp]
 1343     add rsp,56
 1344 $L$dec_key_epilogue::
 1345     mov rdi,QWORD PTR[8+rsp]    ;WIN64 epilogue
 1346     mov rsi,QWORD PTR[16+rsp]
 1347     DB  0F3h,0C3h       ;repret
 1348 $L$SEH_end_AES_set_decrypt_key::
 1349 AES_set_decrypt_key ENDP
 1350 PUBLIC  AES_cbc_encrypt
 1351 
 1352 ALIGN   16
 1353 EXTERN  OPENSSL_ia32cap_P:NEAR
 1354 
 1355 PUBLIC  asm_AES_cbc_encrypt
 1356 
 1357 asm_AES_cbc_encrypt::
 1358 AES_cbc_encrypt PROC PUBLIC
 1359     mov QWORD PTR[8+rsp],rdi    ;WIN64 prologue
 1360     mov QWORD PTR[16+rsp],rsi
 1361     mov rax,rsp
 1362 $L$SEH_begin_AES_cbc_encrypt::
 1363     mov rdi,rcx
 1364     mov rsi,rdx
 1365     mov rdx,r8
 1366     mov rcx,r9
 1367     mov r8,QWORD PTR[40+rsp]
 1368     mov r9,QWORD PTR[48+rsp]
 1369 
 1370 
 1371     cmp rdx,0
 1372     je  $L$cbc_epilogue
 1373     pushfq
 1374     push    rbx
 1375     push    rbp
 1376     push    r12
 1377     push    r13
 1378     push    r14
 1379     push    r15
 1380 $L$cbc_prologue::
 1381 
 1382     cld
 1383     mov r9d,r9d
 1384 
 1385     lea r14,QWORD PTR[$L$AES_Te]
 1386     cmp r9,0
 1387     jne $L$cbc_picked_te
 1388     lea r14,QWORD PTR[$L$AES_Td]
 1389 $L$cbc_picked_te::
 1390 
 1391     mov r10d,DWORD PTR[OPENSSL_ia32cap_P]
 1392     cmp rdx,512
 1393     jb  $L$cbc_slow_prologue
 1394     test    rdx,15
 1395     jnz $L$cbc_slow_prologue
 1396     bt  r10d,IA32CAP_BIT0_HT
 1397     jc  $L$cbc_slow_prologue
 1398 
 1399 
 1400     lea r15,QWORD PTR[((-88-248))+rsp]
 1401     and r15,-64
 1402 
 1403 
 1404     mov r10,r14
 1405     lea r11,QWORD PTR[2304+r14]
 1406     mov r12,r15
 1407     and r10,0FFFh
 1408     and r11,0FFFh
 1409     and r12,0FFFh
 1410 
 1411     cmp r12,r11
 1412     jb  $L$cbc_te_break_out
 1413     sub r12,r11
 1414     sub r15,r12
 1415     jmp $L$cbc_te_ok
 1416 $L$cbc_te_break_out::
 1417     sub r12,r10
 1418     and r12,0FFFh
 1419     add r12,320
 1420     sub r15,r12
 1421 ALIGN   4
 1422 $L$cbc_te_ok::
 1423 
 1424     xchg    r15,rsp
 1425 
 1426     mov QWORD PTR[16+rsp],r15
 1427 $L$cbc_fast_body::
 1428     mov QWORD PTR[24+rsp],rdi
 1429     mov QWORD PTR[32+rsp],rsi
 1430     mov QWORD PTR[40+rsp],rdx
 1431     mov QWORD PTR[48+rsp],rcx
 1432     mov QWORD PTR[56+rsp],r8
 1433     mov DWORD PTR[((80+240))+rsp],0
 1434     mov rbp,r8
 1435     mov rbx,r9
 1436     mov r9,rsi
 1437     mov r8,rdi
 1438     mov r15,rcx
 1439 
 1440     mov eax,DWORD PTR[240+r15]
 1441 
 1442     mov r10,r15
 1443     sub r10,r14
 1444     and r10,0fffh
 1445     cmp r10,2304
 1446     jb  $L$cbc_do_ecopy
 1447     cmp r10,4096-248
 1448     jb  $L$cbc_skip_ecopy
 1449 ALIGN   4
 1450 $L$cbc_do_ecopy::
 1451     mov rsi,r15
 1452     lea rdi,QWORD PTR[80+rsp]
 1453     lea r15,QWORD PTR[80+rsp]
 1454     mov ecx,240/8
 1455     DD  090A548F3h  
 1456     mov DWORD PTR[rdi],eax
 1457 $L$cbc_skip_ecopy::
 1458     mov QWORD PTR[rsp],r15
 1459 
 1460     mov ecx,18
 1461 ALIGN   4
 1462 $L$cbc_prefetch_te::
 1463     mov r10,QWORD PTR[r14]
 1464     mov r11,QWORD PTR[32+r14]
 1465     mov r12,QWORD PTR[64+r14]
 1466     mov r13,QWORD PTR[96+r14]
 1467     lea r14,QWORD PTR[128+r14]
 1468     sub ecx,1
 1469     jnz $L$cbc_prefetch_te
 1470     lea r14,QWORD PTR[((-2304))+r14]
 1471 
 1472     cmp rbx,0
 1473     je  $L$FAST_DECRYPT
 1474 
 1475 
 1476     mov eax,DWORD PTR[rbp]
 1477     mov ebx,DWORD PTR[4+rbp]
 1478     mov ecx,DWORD PTR[8+rbp]
 1479     mov edx,DWORD PTR[12+rbp]
 1480 
 1481 ALIGN   4
 1482 $L$cbc_fast_enc_loop::
 1483     xor eax,DWORD PTR[r8]
 1484     xor ebx,DWORD PTR[4+r8]
 1485     xor ecx,DWORD PTR[8+r8]
 1486     xor edx,DWORD PTR[12+r8]
 1487     mov r15,QWORD PTR[rsp]
 1488     mov QWORD PTR[24+rsp],r8
 1489 
 1490     call    _x86_64_AES_encrypt
 1491 
 1492     mov r8,QWORD PTR[24+rsp]
 1493     mov r10,QWORD PTR[40+rsp]
 1494     mov DWORD PTR[r9],eax
 1495     mov DWORD PTR[4+r9],ebx
 1496     mov DWORD PTR[8+r9],ecx
 1497     mov DWORD PTR[12+r9],edx
 1498 
 1499     lea r8,QWORD PTR[16+r8]
 1500     lea r9,QWORD PTR[16+r9]
 1501     sub r10,16
 1502     test    r10,-16
 1503     mov QWORD PTR[40+rsp],r10
 1504     jnz $L$cbc_fast_enc_loop
 1505     mov rbp,QWORD PTR[56+rsp]
 1506     mov DWORD PTR[rbp],eax
 1507     mov DWORD PTR[4+rbp],ebx
 1508     mov DWORD PTR[8+rbp],ecx
 1509     mov DWORD PTR[12+rbp],edx
 1510 
 1511     jmp $L$cbc_fast_cleanup
 1512 
 1513 
 1514 ALIGN   16
 1515 $L$FAST_DECRYPT::
 1516     cmp r9,r8
 1517     je  $L$cbc_fast_dec_in_place
 1518 
 1519     mov QWORD PTR[64+rsp],rbp
 1520 ALIGN   4
 1521 $L$cbc_fast_dec_loop::
 1522     mov eax,DWORD PTR[r8]
 1523     mov ebx,DWORD PTR[4+r8]
 1524     mov ecx,DWORD PTR[8+r8]
 1525     mov edx,DWORD PTR[12+r8]
 1526     mov r15,QWORD PTR[rsp]
 1527     mov QWORD PTR[24+rsp],r8
 1528 
 1529     call    _x86_64_AES_decrypt
 1530 
 1531     mov rbp,QWORD PTR[64+rsp]
 1532     mov r8,QWORD PTR[24+rsp]
 1533     mov r10,QWORD PTR[40+rsp]
 1534     xor eax,DWORD PTR[rbp]
 1535     xor ebx,DWORD PTR[4+rbp]
 1536     xor ecx,DWORD PTR[8+rbp]
 1537     xor edx,DWORD PTR[12+rbp]
 1538     mov rbp,r8
 1539 
 1540     sub r10,16
 1541     mov QWORD PTR[40+rsp],r10
 1542     mov QWORD PTR[64+rsp],rbp
 1543 
 1544     mov DWORD PTR[r9],eax
 1545     mov DWORD PTR[4+r9],ebx
 1546     mov DWORD PTR[8+r9],ecx
 1547     mov DWORD PTR[12+r9],edx
 1548 
 1549     lea r8,QWORD PTR[16+r8]
 1550     lea r9,QWORD PTR[16+r9]
 1551     jnz $L$cbc_fast_dec_loop
 1552     mov r12,QWORD PTR[56+rsp]
 1553     mov r10,QWORD PTR[rbp]
 1554     mov r11,QWORD PTR[8+rbp]
 1555     mov QWORD PTR[r12],r10
 1556     mov QWORD PTR[8+r12],r11
 1557     jmp $L$cbc_fast_cleanup
 1558 
 1559 ALIGN   16
 1560 $L$cbc_fast_dec_in_place::
 1561     mov r10,QWORD PTR[rbp]
 1562     mov r11,QWORD PTR[8+rbp]
 1563     mov QWORD PTR[((0+64))+rsp],r10
 1564     mov QWORD PTR[((8+64))+rsp],r11
 1565 ALIGN   4
 1566 $L$cbc_fast_dec_in_place_loop::
 1567     mov eax,DWORD PTR[r8]
 1568     mov ebx,DWORD PTR[4+r8]
 1569     mov ecx,DWORD PTR[8+r8]
 1570     mov edx,DWORD PTR[12+r8]
 1571     mov r15,QWORD PTR[rsp]
 1572     mov QWORD PTR[24+rsp],r8
 1573 
 1574     call    _x86_64_AES_decrypt
 1575 
 1576     mov r8,QWORD PTR[24+rsp]
 1577     mov r10,QWORD PTR[40+rsp]
 1578     xor eax,DWORD PTR[((0+64))+rsp]
 1579     xor ebx,DWORD PTR[((4+64))+rsp]
 1580     xor ecx,DWORD PTR[((8+64))+rsp]
 1581     xor edx,DWORD PTR[((12+64))+rsp]
 1582 
 1583     mov r11,QWORD PTR[r8]
 1584     mov r12,QWORD PTR[8+r8]
 1585     sub r10,16
 1586     jz  $L$cbc_fast_dec_in_place_done
 1587 
 1588     mov QWORD PTR[((0+64))+rsp],r11
 1589     mov QWORD PTR[((8+64))+rsp],r12
 1590 
 1591     mov DWORD PTR[r9],eax
 1592     mov DWORD PTR[4+r9],ebx
 1593     mov DWORD PTR[8+r9],ecx
 1594     mov DWORD PTR[12+r9],edx
 1595 
 1596     lea r8,QWORD PTR[16+r8]
 1597     lea r9,QWORD PTR[16+r9]
 1598     mov QWORD PTR[40+rsp],r10
 1599     jmp $L$cbc_fast_dec_in_place_loop
 1600 $L$cbc_fast_dec_in_place_done::
 1601     mov rdi,QWORD PTR[56+rsp]
 1602     mov QWORD PTR[rdi],r11
 1603     mov QWORD PTR[8+rdi],r12
 1604 
 1605     mov DWORD PTR[r9],eax
 1606     mov DWORD PTR[4+r9],ebx
 1607     mov DWORD PTR[8+r9],ecx
 1608     mov DWORD PTR[12+r9],edx
 1609 
 1610 ALIGN   4
 1611 $L$cbc_fast_cleanup::
 1612     cmp DWORD PTR[((80+240))+rsp],0
 1613     lea rdi,QWORD PTR[80+rsp]
 1614     je  $L$cbc_exit
 1615     mov ecx,240/8
 1616     xor rax,rax
 1617     DD  090AB48F3h  
 1618 
 1619     jmp $L$cbc_exit
 1620 
 1621 
 1622 ALIGN   16
 1623 $L$cbc_slow_prologue::
 1624 
 1625     lea rbp,QWORD PTR[((-88))+rsp]
 1626     and rbp,-64
 1627 
 1628     lea r10,QWORD PTR[((-88-63))+rcx]
 1629     sub r10,rbp
 1630     neg r10
 1631     and r10,03c0h
 1632     sub rbp,r10
 1633 
 1634     xchg    rbp,rsp
 1635 
 1636     mov QWORD PTR[16+rsp],rbp
 1637 $L$cbc_slow_body::
 1638 
 1639 
 1640 
 1641 
 1642     mov QWORD PTR[56+rsp],r8
 1643     mov rbp,r8
 1644     mov rbx,r9
 1645     mov r9,rsi
 1646     mov r8,rdi
 1647     mov r15,rcx
 1648     mov r10,rdx
 1649 
 1650     mov eax,DWORD PTR[240+r15]
 1651     mov QWORD PTR[rsp],r15
 1652     shl eax,4
 1653     lea rax,QWORD PTR[rax*1+r15]
 1654     mov QWORD PTR[8+rsp],rax
 1655 
 1656 
 1657     lea r14,QWORD PTR[2048+r14]
 1658     lea rax,QWORD PTR[((768-8))+rsp]
 1659     sub rax,r14
 1660     and rax,0300h
 1661     lea r14,QWORD PTR[rax*1+r14]
 1662 
 1663     cmp rbx,0
 1664     je  $L$SLOW_DECRYPT
 1665 
 1666 
 1667     test    r10,-16
 1668     mov eax,DWORD PTR[rbp]
 1669     mov ebx,DWORD PTR[4+rbp]
 1670     mov ecx,DWORD PTR[8+rbp]
 1671     mov edx,DWORD PTR[12+rbp]
 1672     jz  $L$cbc_slow_enc_tail    
 1673 
 1674 ALIGN   4
 1675 $L$cbc_slow_enc_loop::
 1676     xor eax,DWORD PTR[r8]
 1677     xor ebx,DWORD PTR[4+r8]
 1678     xor ecx,DWORD PTR[8+r8]
 1679     xor edx,DWORD PTR[12+r8]
 1680     mov r15,QWORD PTR[rsp]
 1681     mov QWORD PTR[24+rsp],r8
 1682     mov QWORD PTR[32+rsp],r9
 1683     mov QWORD PTR[40+rsp],r10
 1684 
 1685     call    _x86_64_AES_encrypt_compact
 1686 
 1687     mov r8,QWORD PTR[24+rsp]
 1688     mov r9,QWORD PTR[32+rsp]
 1689     mov r10,QWORD PTR[40+rsp]
 1690     mov DWORD PTR[r9],eax
 1691     mov DWORD PTR[4+r9],ebx
 1692     mov DWORD PTR[8+r9],ecx
 1693     mov DWORD PTR[12+r9],edx
 1694 
 1695     lea r8,QWORD PTR[16+r8]
 1696     lea r9,QWORD PTR[16+r9]
 1697     sub r10,16
 1698     test    r10,-16
 1699     jnz $L$cbc_slow_enc_loop
 1700     test    r10,15
 1701     jnz $L$cbc_slow_enc_tail
 1702     mov rbp,QWORD PTR[56+rsp]
 1703     mov DWORD PTR[rbp],eax
 1704     mov DWORD PTR[4+rbp],ebx
 1705     mov DWORD PTR[8+rbp],ecx
 1706     mov DWORD PTR[12+rbp],edx
 1707 
 1708     jmp $L$cbc_exit
 1709 
 1710 ALIGN   4
 1711 $L$cbc_slow_enc_tail::
 1712     mov r11,rax
 1713     mov r12,rcx
 1714     mov rcx,r10
 1715     mov rsi,r8
 1716     mov rdi,r9
 1717     DD  09066A4F3h      
 1718     mov rcx,16
 1719     sub rcx,r10
 1720     xor rax,rax
 1721     DD  09066AAF3h      
 1722     mov r8,r9
 1723     mov r10,16
 1724     mov rax,r11
 1725     mov rcx,r12
 1726     jmp $L$cbc_slow_enc_loop    
 1727 
 1728 ALIGN   16
 1729 $L$SLOW_DECRYPT::
 1730     shr rax,3
 1731     add r14,rax
 1732 
 1733     mov r11,QWORD PTR[rbp]
 1734     mov r12,QWORD PTR[8+rbp]
 1735     mov QWORD PTR[((0+64))+rsp],r11
 1736     mov QWORD PTR[((8+64))+rsp],r12
 1737 
 1738 ALIGN   4
 1739 $L$cbc_slow_dec_loop::
 1740     mov eax,DWORD PTR[r8]
 1741     mov ebx,DWORD PTR[4+r8]
 1742     mov ecx,DWORD PTR[8+r8]
 1743     mov edx,DWORD PTR[12+r8]
 1744     mov r15,QWORD PTR[rsp]
 1745     mov QWORD PTR[24+rsp],r8
 1746     mov QWORD PTR[32+rsp],r9
 1747     mov QWORD PTR[40+rsp],r10
 1748 
 1749     call    _x86_64_AES_decrypt_compact
 1750 
 1751     mov r8,QWORD PTR[24+rsp]
 1752     mov r9,QWORD PTR[32+rsp]
 1753     mov r10,QWORD PTR[40+rsp]
 1754     xor eax,DWORD PTR[((0+64))+rsp]
 1755     xor ebx,DWORD PTR[((4+64))+rsp]
 1756     xor ecx,DWORD PTR[((8+64))+rsp]
 1757     xor edx,DWORD PTR[((12+64))+rsp]
 1758 
 1759     mov r11,QWORD PTR[r8]
 1760     mov r12,QWORD PTR[8+r8]
 1761     sub r10,16
 1762     jc  $L$cbc_slow_dec_partial
 1763     jz  $L$cbc_slow_dec_done
 1764 
 1765     mov QWORD PTR[((0+64))+rsp],r11
 1766     mov QWORD PTR[((8+64))+rsp],r12
 1767 
 1768     mov DWORD PTR[r9],eax
 1769     mov DWORD PTR[4+r9],ebx
 1770     mov DWORD PTR[8+r9],ecx
 1771     mov DWORD PTR[12+r9],edx
 1772 
 1773     lea r8,QWORD PTR[16+r8]
 1774     lea r9,QWORD PTR[16+r9]
 1775     jmp $L$cbc_slow_dec_loop
 1776 $L$cbc_slow_dec_done::
 1777     mov rdi,QWORD PTR[56+rsp]
 1778     mov QWORD PTR[rdi],r11
 1779     mov QWORD PTR[8+rdi],r12
 1780 
 1781     mov DWORD PTR[r9],eax
 1782     mov DWORD PTR[4+r9],ebx
 1783     mov DWORD PTR[8+r9],ecx
 1784     mov DWORD PTR[12+r9],edx
 1785 
 1786     jmp $L$cbc_exit
 1787 
 1788 ALIGN   4
 1789 $L$cbc_slow_dec_partial::
 1790     mov rdi,QWORD PTR[56+rsp]
 1791     mov QWORD PTR[rdi],r11
 1792     mov QWORD PTR[8+rdi],r12
 1793 
 1794     mov DWORD PTR[((0+64))+rsp],eax
 1795     mov DWORD PTR[((4+64))+rsp],ebx
 1796     mov DWORD PTR[((8+64))+rsp],ecx
 1797     mov DWORD PTR[((12+64))+rsp],edx
 1798 
 1799     mov rdi,r9
 1800     lea rsi,QWORD PTR[64+rsp]
 1801     lea rcx,QWORD PTR[16+r10]
 1802     DD  09066A4F3h  
 1803     jmp $L$cbc_exit
 1804 
 1805 ALIGN   16
 1806 $L$cbc_exit::
 1807     mov rsi,QWORD PTR[16+rsp]
 1808     mov r15,QWORD PTR[rsi]
 1809     mov r14,QWORD PTR[8+rsi]
 1810     mov r13,QWORD PTR[16+rsi]
 1811     mov r12,QWORD PTR[24+rsi]
 1812     mov rbp,QWORD PTR[32+rsi]
 1813     mov rbx,QWORD PTR[40+rsi]
 1814     lea rsp,QWORD PTR[48+rsi]
 1815 $L$cbc_popfq::
 1816     popfq
 1817 $L$cbc_epilogue::
 1818     mov rdi,QWORD PTR[8+rsp]    ;WIN64 epilogue
 1819     mov rsi,QWORD PTR[16+rsp]
 1820     DB  0F3h,0C3h       ;repret
 1821 $L$SEH_end_AES_cbc_encrypt::
 1822 AES_cbc_encrypt ENDP
 1823 ALIGN   64
 1824 $L$AES_Te::
 1825     DD  0a56363c6h,0a56363c6h
 1826     DD  0847c7cf8h,0847c7cf8h
 1827     DD  0997777eeh,0997777eeh
 1828     DD  08d7b7bf6h,08d7b7bf6h
 1829     DD  00df2f2ffh,00df2f2ffh
 1830     DD  0bd6b6bd6h,0bd6b6bd6h
 1831     DD  0b16f6fdeh,0b16f6fdeh
 1832     DD  054c5c591h,054c5c591h
 1833     DD  050303060h,050303060h
 1834     DD  003010102h,003010102h
 1835     DD  0a96767ceh,0a96767ceh
 1836     DD  07d2b2b56h,07d2b2b56h
 1837     DD  019fefee7h,019fefee7h
 1838     DD  062d7d7b5h,062d7d7b5h
 1839     DD  0e6abab4dh,0e6abab4dh
 1840     DD  09a7676ech,09a7676ech
 1841     DD  045caca8fh,045caca8fh
 1842     DD  09d82821fh,09d82821fh
 1843     DD  040c9c989h,040c9c989h
 1844     DD  0877d7dfah,0877d7dfah
 1845     DD  015fafaefh,015fafaefh
 1846     DD  0eb5959b2h,0eb5959b2h
 1847     DD  0c947478eh,0c947478eh
 1848     DD  00bf0f0fbh,00bf0f0fbh
 1849     DD  0ecadad41h,0ecadad41h
 1850     DD  067d4d4b3h,067d4d4b3h
 1851     DD  0fda2a25fh,0fda2a25fh
 1852     DD  0eaafaf45h,0eaafaf45h
 1853     DD  0bf9c9c23h,0bf9c9c23h
 1854     DD  0f7a4a453h,0f7a4a453h
 1855     DD  0967272e4h,0967272e4h
 1856     DD  05bc0c09bh,05bc0c09bh
 1857     DD  0c2b7b775h,0c2b7b775h
 1858     DD  01cfdfde1h,01cfdfde1h
 1859     DD  0ae93933dh,0ae93933dh
 1860     DD  06a26264ch,06a26264ch
 1861     DD  05a36366ch,05a36366ch
 1862     DD  0413f3f7eh,0413f3f7eh
 1863     DD  002f7f7f5h,002f7f7f5h
 1864     DD  04fcccc83h,04fcccc83h
 1865     DD  05c343468h,05c343468h
 1866     DD  0f4a5a551h,0f4a5a551h
 1867     DD  034e5e5d1h,034e5e5d1h
 1868     DD  008f1f1f9h,008f1f1f9h
 1869     DD  0937171e2h,0937171e2h
 1870     DD  073d8d8abh,073d8d8abh
 1871     DD  053313162h,053313162h
 1872     DD  03f15152ah,03f15152ah
 1873     DD  00c040408h,00c040408h
 1874     DD  052c7c795h,052c7c795h
 1875     DD  065232346h,065232346h
 1876     DD  05ec3c39dh,05ec3c39dh
 1877     DD  028181830h,028181830h
 1878     DD  0a1969637h,0a1969637h
 1879     DD  00f05050ah,00f05050ah
 1880     DD  0b59a9a2fh,0b59a9a2fh
 1881     DD  00907070eh,00907070eh
 1882     DD  036121224h,036121224h
 1883     DD  09b80801bh,09b80801bh
 1884     DD  03de2e2dfh,03de2e2dfh
 1885     DD  026ebebcdh,026ebebcdh
 1886     DD  06927274eh,06927274eh
 1887     DD  0cdb2b27fh,0cdb2b27fh
 1888     DD  09f7575eah,09f7575eah
 1889     DD  01b090912h,01b090912h
 1890     DD  09e83831dh,09e83831dh
 1891     DD  0742c2c58h,0742c2c58h
 1892     DD  02e1a1a34h,02e1a1a34h
 1893     DD  02d1b1b36h,02d1b1b36h
 1894     DD  0b26e6edch,0b26e6edch
 1895     DD  0ee5a5ab4h,0ee5a5ab4h
 1896     DD  0fba0a05bh,0fba0a05bh
 1897     DD  0f65252a4h,0f65252a4h
 1898     DD  04d3b3b76h,04d3b3b76h
 1899     DD  061d6d6b7h,061d6d6b7h
 1900     DD  0ceb3b37dh,0ceb3b37dh
 1901     DD  07b292952h,07b292952h
 1902     DD  03ee3e3ddh,03ee3e3ddh
 1903     DD  0712f2f5eh,0712f2f5eh
 1904     DD  097848413h,097848413h
 1905     DD  0f55353a6h,0f55353a6h
 1906     DD  068d1d1b9h,068d1d1b9h
 1907     DD  000000000h,000000000h
 1908     DD  02cededc1h,02cededc1h
 1909     DD  060202040h,060202040h
 1910     DD  01ffcfce3h,01ffcfce3h
 1911     DD  0c8b1b179h,0c8b1b179h
 1912     DD  0ed5b5bb6h,0ed5b5bb6h
 1913     DD  0be6a6ad4h,0be6a6ad4h
 1914     DD  046cbcb8dh,046cbcb8dh
 1915     DD  0d9bebe67h,0d9bebe67h
 1916     DD  04b393972h,04b393972h
 1917     DD  0de4a4a94h,0de4a4a94h
 1918     DD  0d44c4c98h,0d44c4c98h
 1919     DD  0e85858b0h,0e85858b0h
 1920     DD  04acfcf85h,04acfcf85h
 1921     DD  06bd0d0bbh,06bd0d0bbh
 1922     DD  02aefefc5h,02aefefc5h
 1923     DD  0e5aaaa4fh,0e5aaaa4fh
 1924     DD  016fbfbedh,016fbfbedh
 1925     DD  0c5434386h,0c5434386h
 1926     DD  0d74d4d9ah,0d74d4d9ah
 1927     DD  055333366h,055333366h
 1928     DD  094858511h,094858511h
 1929     DD  0cf45458ah,0cf45458ah
 1930     DD  010f9f9e9h,010f9f9e9h
 1931     DD  006020204h,006020204h
 1932     DD  0817f7ffeh,0817f7ffeh
 1933     DD  0f05050a0h,0f05050a0h
 1934     DD  0443c3c78h,0443c3c78h
 1935     DD  0ba9f9f25h,0ba9f9f25h
 1936     DD  0e3a8a84bh,0e3a8a84bh
 1937     DD  0f35151a2h,0f35151a2h
 1938     DD  0fea3a35dh,0fea3a35dh
 1939     DD  0c0404080h,0c0404080h
 1940     DD  08a8f8f05h,08a8f8f05h
 1941     DD  0ad92923fh,0ad92923fh
 1942     DD  0bc9d9d21h,0bc9d9d21h
 1943     DD  048383870h,048383870h
 1944     DD  004f5f5f1h,004f5f5f1h
 1945     DD  0dfbcbc63h,0dfbcbc63h
 1946     DD  0c1b6b677h,0c1b6b677h
 1947     DD  075dadaafh,075dadaafh
 1948     DD  063212142h,063212142h
 1949     DD  030101020h,030101020h
 1950     DD  01affffe5h,01affffe5h
 1951     DD  00ef3f3fdh,00ef3f3fdh
 1952     DD  06dd2d2bfh,06dd2d2bfh
 1953     DD  04ccdcd81h,04ccdcd81h
 1954     DD  0140c0c18h,0140c0c18h
 1955     DD  035131326h,035131326h
 1956     DD  02fececc3h,02fececc3h
 1957     DD  0e15f5fbeh,0e15f5fbeh
 1958     DD  0a2979735h,0a2979735h
 1959     DD  0cc444488h,0cc444488h
 1960     DD  03917172eh,03917172eh
 1961     DD  057c4c493h,057c4c493h
 1962     DD  0f2a7a755h,0f2a7a755h
 1963     DD  0827e7efch,0827e7efch
 1964     DD  0473d3d7ah,0473d3d7ah
 1965     DD  0ac6464c8h,0ac6464c8h
 1966     DD  0e75d5dbah,0e75d5dbah
 1967     DD  02b191932h,02b191932h
 1968     DD  0957373e6h,0957373e6h
 1969     DD  0a06060c0h,0a06060c0h
 1970     DD  098818119h,098818119h
 1971     DD  0d14f4f9eh,0d14f4f9eh
 1972     DD  07fdcdca3h,07fdcdca3h
 1973     DD  066222244h,066222244h
 1974     DD  07e2a2a54h,07e2a2a54h
 1975     DD  0ab90903bh,0ab90903bh
 1976     DD  08388880bh,08388880bh
 1977     DD  0ca46468ch,0ca46468ch
 1978     DD  029eeeec7h,029eeeec7h
 1979     DD  0d3b8b86bh,0d3b8b86bh
 1980     DD  03c141428h,03c141428h
 1981     DD  079dedea7h,079dedea7h
 1982     DD  0e25e5ebch,0e25e5ebch
 1983     DD  01d0b0b16h,01d0b0b16h
 1984     DD  076dbdbadh,076dbdbadh
 1985     DD  03be0e0dbh,03be0e0dbh
 1986     DD  056323264h,056323264h
 1987     DD  04e3a3a74h,04e3a3a74h
 1988     DD  01e0a0a14h,01e0a0a14h
 1989     DD  0db494992h,0db494992h
 1990     DD  00a06060ch,00a06060ch
 1991     DD  06c242448h,06c242448h
 1992     DD  0e45c5cb8h,0e45c5cb8h
 1993     DD  05dc2c29fh,05dc2c29fh
 1994     DD  06ed3d3bdh,06ed3d3bdh
 1995     DD  0efacac43h,0efacac43h
 1996     DD  0a66262c4h,0a66262c4h
 1997     DD  0a8919139h,0a8919139h
 1998     DD  0a4959531h,0a4959531h
 1999     DD  037e4e4d3h,037e4e4d3h
 2000     DD  08b7979f2h,08b7979f2h
 2001     DD  032e7e7d5h,032e7e7d5h
 2002     DD  043c8c88bh,043c8c88bh
 2003     DD  05937376eh,05937376eh
 2004     DD  0b76d6ddah,0b76d6ddah
 2005     DD  08c8d8d01h,08c8d8d01h
 2006     DD  064d5d5b1h,064d5d5b1h
 2007     DD  0d24e4e9ch,0d24e4e9ch
 2008     DD  0e0a9a949h,0e0a9a949h
 2009     DD  0b46c6cd8h,0b46c6cd8h
 2010     DD  0fa5656ach,0fa5656ach
 2011     DD  007f4f4f3h,007f4f4f3h
 2012     DD  025eaeacfh,025eaeacfh
 2013     DD  0af6565cah,0af6565cah
 2014     DD  08e7a7af4h,08e7a7af4h
 2015     DD  0e9aeae47h,0e9aeae47h
 2016     DD  018080810h,018080810h
 2017     DD  0d5baba6fh,0d5baba6fh
 2018     DD  0887878f0h,0887878f0h
 2019     DD  06f25254ah,06f25254ah
 2020     DD  0722e2e5ch,0722e2e5ch
 2021     DD  0241c1c38h,0241c1c38h
 2022     DD  0f1a6a657h,0f1a6a657h
 2023     DD  0c7b4b473h,0c7b4b473h
 2024     DD  051c6c697h,051c6c697h
 2025     DD  023e8e8cbh,023e8e8cbh
 2026     DD  07cdddda1h,07cdddda1h
 2027     DD  09c7474e8h,09c7474e8h
 2028     DD  0211f1f3eh,0211f1f3eh
 2029     DD  0dd4b4b96h,0dd4b4b96h
 2030     DD  0dcbdbd61h,0dcbdbd61h
 2031     DD  0868b8b0dh,0868b8b0dh
 2032     DD  0858a8a0fh,0858a8a0fh
 2033     DD  0907070e0h,0907070e0h
 2034     DD  0423e3e7ch,0423e3e7ch
 2035     DD  0c4b5b571h,0c4b5b571h
 2036     DD  0aa6666cch,0aa6666cch
 2037     DD  0d8484890h,0d8484890h
 2038     DD  005030306h,005030306h
 2039     DD  001f6f6f7h,001f6f6f7h
 2040     DD  0120e0e1ch,0120e0e1ch
 2041     DD  0a36161c2h,0a36161c2h
 2042     DD  05f35356ah,05f35356ah
 2043     DD  0f95757aeh,0f95757aeh
 2044     DD  0d0b9b969h,0d0b9b969h
 2045     DD  091868617h,091868617h
 2046     DD  058c1c199h,058c1c199h
 2047     DD  0271d1d3ah,0271d1d3ah
 2048     DD  0b99e9e27h,0b99e9e27h
 2049     DD  038e1e1d9h,038e1e1d9h
 2050     DD  013f8f8ebh,013f8f8ebh
 2051     DD  0b398982bh,0b398982bh
 2052     DD  033111122h,033111122h
 2053     DD  0bb6969d2h,0bb6969d2h
 2054     DD  070d9d9a9h,070d9d9a9h
 2055     DD  0898e8e07h,0898e8e07h
 2056     DD  0a7949433h,0a7949433h
 2057     DD  0b69b9b2dh,0b69b9b2dh
 2058     DD  0221e1e3ch,0221e1e3ch
 2059     DD  092878715h,092878715h
 2060     DD  020e9e9c9h,020e9e9c9h
 2061     DD  049cece87h,049cece87h
 2062     DD  0ff5555aah,0ff5555aah
 2063     DD  078282850h,078282850h
 2064     DD  07adfdfa5h,07adfdfa5h
 2065     DD  08f8c8c03h,08f8c8c03h
 2066     DD  0f8a1a159h,0f8a1a159h
 2067     DD  080898909h,080898909h
 2068     DD  0170d0d1ah,0170d0d1ah
 2069     DD  0dabfbf65h,0dabfbf65h
 2070     DD  031e6e6d7h,031e6e6d7h
 2071     DD  0c6424284h,0c6424284h
 2072     DD  0b86868d0h,0b86868d0h
 2073     DD  0c3414182h,0c3414182h
 2074     DD  0b0999929h,0b0999929h
 2075     DD  0772d2d5ah,0772d2d5ah
 2076     DD  0110f0f1eh,0110f0f1eh
 2077     DD  0cbb0b07bh,0cbb0b07bh
 2078     DD  0fc5454a8h,0fc5454a8h
 2079     DD  0d6bbbb6dh,0d6bbbb6dh
 2080     DD  03a16162ch,03a16162ch
 2081 DB  063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
 2082 DB  030h,001h,067h,02bh,0feh,0d7h,0abh,076h
 2083 DB  0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
 2084 DB  0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
 2085 DB  0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
 2086 DB  034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
 2087 DB  004h,0c7h,023h,0c3h,018h,096h,005h,09ah
 2088 DB  007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
 2089 DB  009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
 2090 DB  052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
 2091 DB  053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
 2092 DB  06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
 2093 DB  0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
 2094 DB  045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
 2095 DB  051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
 2096 DB  0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
 2097 DB  0cdh,00ch,013h,0ech,05fh,097h,044h,017h
 2098 DB  0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
 2099 DB  060h,081h,04fh,0dch,022h,02ah,090h,088h
 2100 DB  046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
 2101 DB  0e0h,032h,03ah,00ah,049h,006h,024h,05ch
 2102 DB  0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
 2103 DB  0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
 2104 DB  06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
 2105 DB  0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
 2106 DB  0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
 2107 DB  070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
 2108 DB  061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
 2109 DB  0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
 2110 DB  09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
 2111 DB  08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
 2112 DB  041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
 2113 DB  063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
 2114 DB  030h,001h,067h,02bh,0feh,0d7h,0abh,076h
 2115 DB  0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
 2116 DB  0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
 2117 DB  0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
 2118 DB  034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
 2119 DB  004h,0c7h,023h,0c3h,018h,096h,005h,09ah
 2120 DB  007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
 2121 DB  009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
 2122 DB  052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
 2123 DB  053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
 2124 DB  06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
 2125 DB  0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
 2126 DB  045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
 2127 DB  051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
 2128 DB  0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
 2129 DB  0cdh,00ch,013h,0ech,05fh,097h,044h,017h
 2130 DB  0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
 2131 DB  060h,081h,04fh,0dch,022h,02ah,090h,088h
 2132 DB  046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
 2133 DB  0e0h,032h,03ah,00ah,049h,006h,024h,05ch
 2134 DB  0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
 2135 DB  0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
 2136 DB  06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
 2137 DB  0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
 2138 DB  0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
 2139 DB  070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
 2140 DB  061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
 2141 DB  0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
 2142 DB  09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
 2143 DB  08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
 2144 DB  041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
 2145 DB  063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
 2146 DB  030h,001h,067h,02bh,0feh,0d7h,0abh,076h
 2147 DB  0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
 2148 DB  0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
 2149 DB  0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
 2150 DB  034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
 2151 DB  004h,0c7h,023h,0c3h,018h,096h,005h,09ah
 2152 DB  007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
 2153 DB  009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
 2154 DB  052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
 2155 DB  053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
 2156 DB  06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
 2157 DB  0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
 2158 DB  045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
 2159 DB  051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
 2160 DB  0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
 2161 DB  0cdh,00ch,013h,0ech,05fh,097h,044h,017h
 2162 DB  0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
 2163 DB  060h,081h,04fh,0dch,022h,02ah,090h,088h
 2164 DB  046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
 2165 DB  0e0h,032h,03ah,00ah,049h,006h,024h,05ch
 2166 DB  0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
 2167 DB  0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
 2168 DB  06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
 2169 DB  0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
 2170 DB  0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
 2171 DB  070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
 2172 DB  061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
 2173 DB  0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
 2174 DB  09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
 2175 DB  08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
 2176 DB  041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
 2177 DB  063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
 2178 DB  030h,001h,067h,02bh,0feh,0d7h,0abh,076h
 2179 DB  0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
 2180 DB  0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
 2181 DB  0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
 2182 DB  034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
 2183 DB  004h,0c7h,023h,0c3h,018h,096h,005h,09ah
 2184 DB  007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
 2185 DB  009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
 2186 DB  052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
 2187 DB  053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
 2188 DB  06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
 2189 DB  0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
 2190 DB  045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
 2191 DB  051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
 2192 DB  0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
 2193 DB  0cdh,00ch,013h,0ech,05fh,097h,044h,017h
 2194 DB  0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
 2195 DB  060h,081h,04fh,0dch,022h,02ah,090h,088h
 2196 DB  046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
 2197 DB  0e0h,032h,03ah,00ah,049h,006h,024h,05ch
 2198 DB  0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
 2199 DB  0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
 2200 DB  06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
 2201 DB  0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
 2202 DB  0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
 2203 DB  070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
 2204 DB  061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
 2205 DB  0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
 2206 DB  09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
 2207 DB  08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
 2208 DB  041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
 2209     DD  000000001h,000000002h,000000004h,000000008h
 2210     DD  000000010h,000000020h,000000040h,000000080h
 2211     DD  00000001bh,000000036h,080808080h,080808080h
 2212     DD  0fefefefeh,0fefefefeh,01b1b1b1bh,01b1b1b1bh
 2213 ALIGN   64
 2214 $L$AES_Td::
 2215     DD  050a7f451h,050a7f451h
 2216     DD  05365417eh,05365417eh
 2217     DD  0c3a4171ah,0c3a4171ah
 2218     DD  0965e273ah,0965e273ah
 2219     DD  0cb6bab3bh,0cb6bab3bh
 2220     DD  0f1459d1fh,0f1459d1fh
 2221     DD  0ab58faach,0ab58faach
 2222     DD  09303e34bh,09303e34bh
 2223     DD  055fa3020h,055fa3020h
 2224     DD  0f66d76adh,0f66d76adh
 2225     DD  09176cc88h,09176cc88h
 2226     DD  0254c02f5h,0254c02f5h
 2227     DD  0fcd7e54fh,0fcd7e54fh
 2228     DD  0d7cb2ac5h,0d7cb2ac5h
 2229     DD  080443526h,080443526h
 2230     DD  08fa362b5h,08fa362b5h
 2231     DD  0495ab1deh,0495ab1deh
 2232     DD  0671bba25h,0671bba25h
 2233     DD  0980eea45h,0980eea45h
 2234     DD  0e1c0fe5dh,0e1c0fe5dh
 2235     DD  002752fc3h,002752fc3h
 2236     DD  012f04c81h,012f04c81h
 2237     DD  0a397468dh,0a397468dh
 2238     DD  0c6f9d36bh,0c6f9d36bh
 2239     DD  0e75f8f03h,0e75f8f03h
 2240     DD  0959c9215h,0959c9215h
 2241     DD  0eb7a6dbfh,0eb7a6dbfh
 2242     DD  0da595295h,0da595295h
 2243     DD  02d83bed4h,02d83bed4h
 2244     DD  0d3217458h,0d3217458h
 2245     DD  02969e049h,02969e049h
 2246     DD  044c8c98eh,044c8c98eh
 2247     DD  06a89c275h,06a89c275h
 2248     DD  078798ef4h,078798ef4h
 2249     DD  06b3e5899h,06b3e5899h
 2250     DD  0dd71b927h,0dd71b927h
 2251     DD  0b64fe1beh,0b64fe1beh
 2252     DD  017ad88f0h,017ad88f0h
 2253     DD  066ac20c9h,066ac20c9h
 2254     DD  0b43ace7dh,0b43ace7dh
 2255     DD  0184adf63h,0184adf63h
 2256     DD  082311ae5h,082311ae5h
 2257     DD  060335197h,060335197h
 2258     DD  0457f5362h,0457f5362h
 2259     DD  0e07764b1h,0e07764b1h
 2260     DD  084ae6bbbh,084ae6bbbh
 2261     DD  01ca081feh,01ca081feh
 2262     DD  0942b08f9h,0942b08f9h
 2263     DD  058684870h,058684870h
 2264     DD  019fd458fh,019fd458fh
 2265     DD  0876cde94h,0876cde94h
 2266     DD  0b7f87b52h,0b7f87b52h
 2267     DD  023d373abh,023d373abh
 2268     DD  0e2024b72h,0e2024b72h
 2269     DD  0578f1fe3h,0578f1fe3h
 2270     DD  02aab5566h,02aab5566h
 2271     DD  00728ebb2h,00728ebb2h
 2272     DD  003c2b52fh,003c2b52fh
 2273     DD  09a7bc586h,09a7bc586h
 2274     DD  0a50837d3h,0a50837d3h
 2275     DD  0f2872830h,0f2872830h
 2276     DD  0b2a5bf23h,0b2a5bf23h
 2277     DD  0ba6a0302h,0ba6a0302h
 2278     DD  05c8216edh,05c8216edh
 2279     DD  02b1ccf8ah,02b1ccf8ah
 2280     DD  092b479a7h,092b479a7h
 2281     DD  0f0f207f3h,0f0f207f3h
 2282     DD  0a1e2694eh,0a1e2694eh
 2283     DD  0cdf4da65h,0cdf4da65h
 2284     DD  0d5be0506h,0d5be0506h
 2285     DD  01f6234d1h,01f6234d1h
 2286     DD  08afea6c4h,08afea6c4h
 2287     DD  09d532e34h,09d532e34h
 2288     DD  0a055f3a2h,0a055f3a2h
 2289     DD  032e18a05h,032e18a05h
 2290     DD  075ebf6a4h,075ebf6a4h
 2291     DD  039ec830bh,039ec830bh
 2292     DD  0aaef6040h,0aaef6040h
 2293     DD  0069f715eh,0069f715eh
 2294     DD  051106ebdh,051106ebdh
 2295     DD  0f98a213eh,0f98a213eh
 2296     DD  03d06dd96h,03d06dd96h
 2297     DD  0ae053eddh,0ae053eddh
 2298     DD  046bde64dh,046bde64dh
 2299     DD  0b58d5491h,0b58d5491h
 2300     DD  0055dc471h,0055dc471h
 2301     DD  06fd40604h,06fd40604h
 2302     DD  0ff155060h,0ff155060h
 2303     DD  024fb9819h,024fb9819h
 2304     DD  097e9bdd6h,097e9bdd6h
 2305     DD  0cc434089h,0cc434089h
 2306     DD  0779ed967h,0779ed967h
 2307     DD  0bd42e8b0h,0bd42e8b0h
 2308     DD  0888b8907h,0888b8907h
 2309     DD  0385b19e7h,0385b19e7h
 2310     DD  0dbeec879h,0dbeec879h
 2311     DD  0470a7ca1h,0470a7ca1h
 2312     DD  0e90f427ch,0e90f427ch
 2313     DD  0c91e84f8h,0c91e84f8h
 2314     DD  000000000h,000000000h
 2315     DD  083868009h,083868009h
 2316     DD  048ed2b32h,048ed2b32h
 2317     DD  0ac70111eh,0ac70111eh
 2318     DD  04e725a6ch,04e725a6ch
 2319     DD  0fbff0efdh,0fbff0efdh
 2320     DD  05638850fh,05638850fh
 2321     DD  01ed5ae3dh,01ed5ae3dh
 2322     DD  027392d36h,027392d36h
 2323     DD  064d90f0ah,064d90f0ah
 2324     DD  021a65c68h,021a65c68h
 2325     DD  0d1545b9bh,0d1545b9bh
 2326     DD  03a2e3624h,03a2e3624h
 2327     DD  0b1670a0ch,0b1670a0ch
 2328     DD  00fe75793h,00fe75793h
 2329     DD  0d296eeb4h,0d296eeb4h
 2330     DD  09e919b1bh,09e919b1bh
 2331     DD  04fc5c080h,04fc5c080h
 2332     DD  0a220dc61h,0a220dc61h
 2333     DD  0694b775ah,0694b775ah
 2334     DD  0161a121ch,0161a121ch
 2335     DD  00aba93e2h,00aba93e2h
 2336     DD  0e52aa0c0h,0e52aa0c0h
 2337     DD  043e0223ch,043e0223ch
 2338     DD  01d171b12h,01d171b12h
 2339     DD  00b0d090eh,00b0d090eh
 2340     DD  0adc78bf2h,0adc78bf2h
 2341     DD  0b9a8b62dh,0b9a8b62dh
 2342     DD  0c8a91e14h,0c8a91e14h
 2343     DD  08519f157h,08519f157h
 2344     DD  04c0775afh,04c0775afh
 2345     DD  0bbdd99eeh,0bbdd99eeh
 2346     DD  0fd607fa3h,0fd607fa3h
 2347     DD  09f2601f7h,09f2601f7h
 2348     DD  0bcf5725ch,0bcf5725ch
 2349     DD  0c53b6644h,0c53b6644h
 2350     DD  0347efb5bh,0347efb5bh
 2351     DD  07629438bh,07629438bh
 2352     DD  0dcc623cbh,0dcc623cbh
 2353     DD  068fcedb6h,068fcedb6h
 2354     DD  063f1e4b8h,063f1e4b8h
 2355     DD  0cadc31d7h,0cadc31d7h
 2356     DD  010856342h,010856342h
 2357     DD  040229713h,040229713h
 2358     DD  02011c684h,02011c684h
 2359     DD  07d244a85h,07d244a85h
 2360     DD  0f83dbbd2h,0f83dbbd2h
 2361     DD  01132f9aeh,01132f9aeh
 2362     DD  06da129c7h,06da129c7h
 2363     DD  04b2f9e1dh,04b2f9e1dh
 2364     DD  0f330b2dch,0f330b2dch
 2365     DD  0ec52860dh,0ec52860dh
 2366     DD  0d0e3c177h,0d0e3c177h
 2367     DD  06c16b32bh,06c16b32bh
 2368     DD  099b970a9h,099b970a9h
 2369     DD  0fa489411h,0fa489411h
 2370     DD  02264e947h,02264e947h
 2371     DD  0c48cfca8h,0c48cfca8h
 2372     DD  01a3ff0a0h,01a3ff0a0h
 2373     DD  0d82c7d56h,0d82c7d56h
 2374     DD  0ef903322h,0ef903322h
 2375     DD  0c74e4987h,0c74e4987h
 2376     DD  0c1d138d9h,0c1d138d9h
 2377     DD  0fea2ca8ch,0fea2ca8ch
 2378     DD  0360bd498h,0360bd498h
 2379     DD  0cf81f5a6h,0cf81f5a6h
 2380     DD  028de7aa5h,028de7aa5h
 2381     DD  0268eb7dah,0268eb7dah
 2382     DD  0a4bfad3fh,0a4bfad3fh
 2383     DD  0e49d3a2ch,0e49d3a2ch
 2384     DD  00d927850h,00d927850h
 2385     DD  09bcc5f6ah,09bcc5f6ah
 2386     DD  062467e54h,062467e54h
 2387     DD  0c2138df6h,0c2138df6h
 2388     DD  0e8b8d890h,0e8b8d890h
 2389     DD  05ef7392eh,05ef7392eh
 2390     DD  0f5afc382h,0f5afc382h
 2391     DD  0be805d9fh,0be805d9fh
 2392     DD  07c93d069h,07c93d069h
 2393     DD  0a92dd56fh,0a92dd56fh
 2394     DD  0b31225cfh,0b31225cfh
 2395     DD  03b99acc8h,03b99acc8h
 2396     DD  0a77d1810h,0a77d1810h
 2397     DD  06e639ce8h,06e639ce8h
 2398     DD  07bbb3bdbh,07bbb3bdbh
 2399     DD  0097826cdh,0097826cdh
 2400     DD  0f418596eh,0f418596eh
 2401     DD  001b79aech,001b79aech
 2402     DD  0a89a4f83h,0a89a4f83h
 2403     DD  0656e95e6h,0656e95e6h
 2404     DD  07ee6ffaah,07ee6ffaah
 2405     DD  008cfbc21h,008cfbc21h
 2406     DD  0e6e815efh,0e6e815efh
 2407     DD  0d99be7bah,0d99be7bah
 2408     DD  0ce366f4ah,0ce366f4ah
 2409     DD  0d4099feah,0d4099feah
 2410     DD  0d67cb029h,0d67cb029h
 2411     DD  0afb2a431h,0afb2a431h
 2412     DD  031233f2ah,031233f2ah
 2413     DD  03094a5c6h,03094a5c6h
 2414     DD  0c066a235h,0c066a235h
 2415     DD  037bc4e74h,037bc4e74h
 2416     DD  0a6ca82fch,0a6ca82fch
 2417     DD  0b0d090e0h,0b0d090e0h
 2418     DD  015d8a733h,015d8a733h
 2419     DD  04a9804f1h,04a9804f1h
 2420     DD  0f7daec41h,0f7daec41h
 2421     DD  00e50cd7fh,00e50cd7fh
 2422     DD  02ff69117h,02ff69117h
 2423     DD  08dd64d76h,08dd64d76h
 2424     DD  04db0ef43h,04db0ef43h
 2425     DD  0544daacch,0544daacch
 2426     DD  0df0496e4h,0df0496e4h
 2427     DD  0e3b5d19eh,0e3b5d19eh
 2428     DD  01b886a4ch,01b886a4ch
 2429     DD  0b81f2cc1h,0b81f2cc1h
 2430     DD  07f516546h,07f516546h
 2431     DD  004ea5e9dh,004ea5e9dh
 2432     DD  05d358c01h,05d358c01h
 2433     DD  0737487fah,0737487fah
 2434     DD  02e410bfbh,02e410bfbh
 2435     DD  05a1d67b3h,05a1d67b3h
 2436     DD  052d2db92h,052d2db92h
 2437     DD  0335610e9h,0335610e9h
 2438     DD  01347d66dh,01347d66dh
 2439     DD  08c61d79ah,08c61d79ah
 2440     DD  07a0ca137h,07a0ca137h
 2441     DD  08e14f859h,08e14f859h
 2442     DD  0893c13ebh,0893c13ebh
 2443     DD  0ee27a9ceh,0ee27a9ceh
 2444     DD  035c961b7h,035c961b7h
 2445     DD  0ede51ce1h,0ede51ce1h
 2446     DD  03cb1477ah,03cb1477ah
 2447     DD  059dfd29ch,059dfd29ch
 2448     DD  03f73f255h,03f73f255h
 2449     DD  079ce1418h,079ce1418h
 2450     DD  0bf37c773h,0bf37c773h
 2451     DD  0eacdf753h,0eacdf753h
 2452     DD  05baafd5fh,05baafd5fh
 2453     DD  0146f3ddfh,0146f3ddfh
 2454     DD  086db4478h,086db4478h
 2455     DD  081f3afcah,081f3afcah
 2456     DD  03ec468b9h,03ec468b9h
 2457     DD  02c342438h,02c342438h
 2458     DD  05f40a3c2h,05f40a3c2h
 2459     DD  072c31d16h,072c31d16h
 2460     DD  00c25e2bch,00c25e2bch
 2461     DD  08b493c28h,08b493c28h
 2462     DD  041950dffh,041950dffh
 2463     DD  07101a839h,07101a839h
 2464     DD  0deb30c08h,0deb30c08h
 2465     DD  09ce4b4d8h,09ce4b4d8h
 2466     DD  090c15664h,090c15664h
 2467     DD  06184cb7bh,06184cb7bh
 2468     DD  070b632d5h,070b632d5h
 2469     DD  0745c6c48h,0745c6c48h
 2470     DD  04257b8d0h,04257b8d0h
 2471 DB  052h,009h,06ah,0d5h,030h,036h,0a5h,038h
 2472 DB  0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
 2473 DB  07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
 2474 DB  034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
 2475 DB  054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
 2476 DB  0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
 2477 DB  008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
 2478 DB  076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
 2479 DB  072h,0f8h,0f6h,064h,086h,068h,098h,016h
 2480 DB  0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
 2481 DB  06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
 2482 DB  05eh,015h,046h,057h,0a7h,08dh,09dh,084h
 2483 DB  090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
 2484 DB  0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
 2485 DB  0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
 2486 DB  0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
 2487 DB  03ah,091h,011h,041h,04fh,067h,0dch,0eah
 2488 DB  097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
 2489 DB  096h,0ach,074h,022h,0e7h,0adh,035h,085h
 2490 DB  0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
 2491 DB  047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
 2492 DB  06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
 2493 DB  0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
 2494 DB  09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
 2495 DB  01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
 2496 DB  0b1h,012h,010h,059h,027h,080h,0ech,05fh
 2497 DB  060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
 2498 DB  02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
 2499 DB  0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
 2500 DB  0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
 2501 DB  017h,02bh,004h,07eh,0bah,077h,0d6h,026h
 2502 DB  0e1h,069h,014h,063h,055h,021h,00ch,07dh
 2503     DD  080808080h,080808080h,0fefefefeh,0fefefefeh
 2504     DD  01b1b1b1bh,01b1b1b1bh,0,0
 2505 DB  052h,009h,06ah,0d5h,030h,036h,0a5h,038h
 2506 DB  0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
 2507 DB  07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
 2508 DB  034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
 2509 DB  054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
 2510 DB  0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
 2511 DB  008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
 2512 DB  076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
 2513 DB  072h,0f8h,0f6h,064h,086h,068h,098h,016h
 2514 DB  0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
 2515 DB  06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
 2516 DB  05eh,015h,046h,057h,0a7h,08dh,09dh,084h
 2517 DB  090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
 2518 DB  0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
 2519 DB  0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
 2520 DB  0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
 2521 DB  03ah,091h,011h,041h,04fh,067h,0dch,0eah
 2522 DB  097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
 2523 DB  096h,0ach,074h,022h,0e7h,0adh,035h,085h
 2524 DB  0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
 2525 DB  047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
 2526 DB  06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
 2527 DB  0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
 2528 DB  09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
 2529 DB  01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
 2530 DB  0b1h,012h,010h,059h,027h,080h,0ech,05fh
 2531 DB  060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
 2532 DB  02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
 2533 DB  0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
 2534 DB  0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
 2535 DB  017h,02bh,004h,07eh,0bah,077h,0d6h,026h
 2536 DB  0e1h,069h,014h,063h,055h,021h,00ch,07dh
 2537     DD  080808080h,080808080h,0fefefefeh,0fefefefeh
 2538     DD  01b1b1b1bh,01b1b1b1bh,0,0
 2539 DB  052h,009h,06ah,0d5h,030h,036h,0a5h,038h
 2540 DB  0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
 2541 DB  07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
 2542 DB  034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
 2543 DB  054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
 2544 DB  0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
 2545 DB  008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
 2546 DB  076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
 2547 DB  072h,0f8h,0f6h,064h,086h,068h,098h,016h
 2548 DB  0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
 2549 DB  06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
 2550 DB  05eh,015h,046h,057h,0a7h,08dh,09dh,084h
 2551 DB  090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
 2552 DB  0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
 2553 DB  0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
 2554 DB  0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
 2555 DB  03ah,091h,011h,041h,04fh,067h,0dch,0eah
 2556 DB  097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
 2557 DB  096h,0ach,074h,022h,0e7h,0adh,035h,085h
 2558 DB  0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
 2559 DB  047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
 2560 DB  06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
 2561 DB  0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
 2562 DB  09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
 2563 DB  01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
 2564 DB  0b1h,012h,010h,059h,027h,080h,0ech,05fh
 2565 DB  060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
 2566 DB  02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
 2567 DB  0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
 2568 DB  0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
 2569 DB  017h,02bh,004h,07eh,0bah,077h,0d6h,026h
 2570 DB  0e1h,069h,014h,063h,055h,021h,00ch,07dh
 2571     DD  080808080h,080808080h,0fefefefeh,0fefefefeh
 2572     DD  01b1b1b1bh,01b1b1b1bh,0,0
 2573 DB  052h,009h,06ah,0d5h,030h,036h,0a5h,038h
 2574 DB  0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
 2575 DB  07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
 2576 DB  034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
 2577 DB  054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
 2578 DB  0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
 2579 DB  008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
 2580 DB  076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
 2581 DB  072h,0f8h,0f6h,064h,086h,068h,098h,016h
 2582 DB  0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
 2583 DB  06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
 2584 DB  05eh,015h,046h,057h,0a7h,08dh,09dh,084h
 2585 DB  090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
 2586 DB  0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
 2587 DB  0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
 2588 DB  0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
 2589 DB  03ah,091h,011h,041h,04fh,067h,0dch,0eah
 2590 DB  097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
 2591 DB  096h,0ach,074h,022h,0e7h,0adh,035h,085h
 2592 DB  0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
 2593 DB  047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
 2594 DB  06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
 2595 DB  0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
 2596 DB  09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
 2597 DB  01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
 2598 DB  0b1h,012h,010h,059h,027h,080h,0ech,05fh
 2599 DB  060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
 2600 DB  02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
 2601 DB  0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
 2602 DB  0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
 2603 DB  017h,02bh,004h,07eh,0bah,077h,0d6h,026h
 2604 DB  0e1h,069h,014h,063h,055h,021h,00ch,07dh
 2605     DD  080808080h,080808080h,0fefefefeh,0fefefefeh
 2606     DD  01b1b1b1bh,01b1b1b1bh,0,0
 2607 DB  65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
 2608 DB  67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
 2609 DB  112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
 2610 DB  62,0
 2611 ALIGN   64
 2612 EXTERN  __imp_RtlVirtualUnwind:NEAR
 2613 
 2614 ALIGN   16
 2615 block_se_handler    PROC PRIVATE
 2616     push    rsi
 2617     push    rdi
 2618     push    rbx
 2619     push    rbp
 2620     push    r12
 2621     push    r13
 2622     push    r14
 2623     push    r15
 2624     pushfq
 2625     sub rsp,64
 2626 
 2627     mov rax,QWORD PTR[120+r8]
 2628     mov rbx,QWORD PTR[248+r8]
 2629 
 2630     mov rsi,QWORD PTR[8+r9]
 2631     mov r11,QWORD PTR[56+r9]
 2632 
 2633     mov r10d,DWORD PTR[r11]
 2634     lea r10,QWORD PTR[r10*1+rsi]
 2635     cmp rbx,r10
 2636     jb  $L$in_block_prologue
 2637 
 2638     mov rax,QWORD PTR[152+r8]
 2639 
 2640     mov r10d,DWORD PTR[4+r11]
 2641     lea r10,QWORD PTR[r10*1+rsi]
 2642     cmp rbx,r10
 2643     jae $L$in_block_prologue
 2644 
 2645     mov rax,QWORD PTR[24+rax]
 2646     lea rax,QWORD PTR[48+rax]
 2647 
 2648     mov rbx,QWORD PTR[((-8))+rax]
 2649     mov rbp,QWORD PTR[((-16))+rax]
 2650     mov r12,QWORD PTR[((-24))+rax]
 2651     mov r13,QWORD PTR[((-32))+rax]
 2652     mov r14,QWORD PTR[((-40))+rax]
 2653     mov r15,QWORD PTR[((-48))+rax]
 2654     mov QWORD PTR[144+r8],rbx
 2655     mov QWORD PTR[160+r8],rbp
 2656     mov QWORD PTR[216+r8],r12
 2657     mov QWORD PTR[224+r8],r13
 2658     mov QWORD PTR[232+r8],r14
 2659     mov QWORD PTR[240+r8],r15
 2660 
 2661 $L$in_block_prologue::
 2662     mov rdi,QWORD PTR[8+rax]
 2663     mov rsi,QWORD PTR[16+rax]
 2664     mov QWORD PTR[152+r8],rax
 2665     mov QWORD PTR[168+r8],rsi
 2666     mov QWORD PTR[176+r8],rdi
 2667 
 2668     jmp $L$common_seh_exit
 2669 block_se_handler    ENDP
 2670 
 2671 
 2672 ALIGN   16
 2673 key_se_handler  PROC PRIVATE
 2674     push    rsi
 2675     push    rdi
 2676     push    rbx
 2677     push    rbp
 2678     push    r12
 2679     push    r13
 2680     push    r14
 2681     push    r15
 2682     pushfq
 2683     sub rsp,64
 2684 
 2685     mov rax,QWORD PTR[120+r8]
 2686     mov rbx,QWORD PTR[248+r8]
 2687 
 2688     mov rsi,QWORD PTR[8+r9]
 2689     mov r11,QWORD PTR[56+r9]
 2690 
 2691     mov r10d,DWORD PTR[r11]
 2692     lea r10,QWORD PTR[r10*1+rsi]
 2693     cmp rbx,r10
 2694     jb  $L$in_key_prologue
 2695 
 2696     mov rax,QWORD PTR[152+r8]
 2697 
 2698     mov r10d,DWORD PTR[4+r11]
 2699     lea r10,QWORD PTR[r10*1+rsi]
 2700     cmp rbx,r10
 2701     jae $L$in_key_prologue
 2702 
 2703     lea rax,QWORD PTR[56+rax]
 2704 
 2705     mov rbx,QWORD PTR[((-8))+rax]
 2706     mov rbp,QWORD PTR[((-16))+rax]
 2707     mov r12,QWORD PTR[((-24))+rax]
 2708     mov r13,QWORD PTR[((-32))+rax]
 2709     mov r14,QWORD PTR[((-40))+rax]
 2710     mov r15,QWORD PTR[((-48))+rax]
 2711     mov QWORD PTR[144+r8],rbx
 2712     mov QWORD PTR[160+r8],rbp
 2713     mov QWORD PTR[216+r8],r12
 2714     mov QWORD PTR[224+r8],r13
 2715     mov QWORD PTR[232+r8],r14
 2716     mov QWORD PTR[240+r8],r15
 2717 
 2718 $L$in_key_prologue::
 2719     mov rdi,QWORD PTR[8+rax]
 2720     mov rsi,QWORD PTR[16+rax]
 2721     mov QWORD PTR[152+r8],rax
 2722     mov QWORD PTR[168+r8],rsi
 2723     mov QWORD PTR[176+r8],rdi
 2724 
 2725     jmp $L$common_seh_exit
 2726 key_se_handler  ENDP
 2727 
 2728 
 2729 ALIGN   16
 2730 cbc_se_handler  PROC PRIVATE
 2731     push    rsi
 2732     push    rdi
 2733     push    rbx
 2734     push    rbp
 2735     push    r12
 2736     push    r13
 2737     push    r14
 2738     push    r15
 2739     pushfq
 2740     sub rsp,64
 2741 
 2742     mov rax,QWORD PTR[120+r8]
 2743     mov rbx,QWORD PTR[248+r8]
 2744 
 2745     lea r10,QWORD PTR[$L$cbc_prologue]
 2746     cmp rbx,r10
 2747     jb  $L$in_cbc_prologue
 2748 
 2749     lea r10,QWORD PTR[$L$cbc_fast_body]
 2750     cmp rbx,r10
 2751     jb  $L$in_cbc_frame_setup
 2752 
 2753     lea r10,QWORD PTR[$L$cbc_slow_prologue]
 2754     cmp rbx,r10
 2755     jb  $L$in_cbc_body
 2756 
 2757     lea r10,QWORD PTR[$L$cbc_slow_body]
 2758     cmp rbx,r10
 2759     jb  $L$in_cbc_frame_setup
 2760 
 2761 $L$in_cbc_body::
 2762     mov rax,QWORD PTR[152+r8]
 2763 
 2764     lea r10,QWORD PTR[$L$cbc_epilogue]
 2765     cmp rbx,r10
 2766     jae $L$in_cbc_prologue
 2767 
 2768     lea rax,QWORD PTR[8+rax]
 2769 
 2770     lea r10,QWORD PTR[$L$cbc_popfq]
 2771     cmp rbx,r10
 2772     jae $L$in_cbc_prologue
 2773 
 2774     mov rax,QWORD PTR[8+rax]
 2775     lea rax,QWORD PTR[56+rax]
 2776 
 2777 $L$in_cbc_frame_setup::
 2778     mov rbx,QWORD PTR[((-16))+rax]
 2779     mov rbp,QWORD PTR[((-24))+rax]
 2780     mov r12,QWORD PTR[((-32))+rax]
 2781     mov r13,QWORD PTR[((-40))+rax]
 2782     mov r14,QWORD PTR[((-48))+rax]
 2783     mov r15,QWORD PTR[((-56))+rax]
 2784     mov QWORD PTR[144+r8],rbx
 2785     mov QWORD PTR[160+r8],rbp
 2786     mov QWORD PTR[216+r8],r12
 2787     mov QWORD PTR[224+r8],r13
 2788     mov QWORD PTR[232+r8],r14
 2789     mov QWORD PTR[240+r8],r15
 2790 
 2791 $L$in_cbc_prologue::
 2792     mov rdi,QWORD PTR[8+rax]
 2793     mov rsi,QWORD PTR[16+rax]
 2794     mov QWORD PTR[152+r8],rax
 2795     mov QWORD PTR[168+r8],rsi
 2796     mov QWORD PTR[176+r8],rdi
 2797 
 2798 $L$common_seh_exit::
 2799 
 2800     mov rdi,QWORD PTR[40+r9]
 2801     mov rsi,r8
 2802     mov ecx,154
 2803     DD  0a548f3fch      
 2804 
 2805     mov rsi,r9
 2806     xor rcx,rcx
 2807     mov rdx,QWORD PTR[8+rsi]
 2808     mov r8,QWORD PTR[rsi]
 2809     mov r9,QWORD PTR[16+rsi]
 2810     mov r10,QWORD PTR[40+rsi]
 2811     lea r11,QWORD PTR[56+rsi]
 2812     lea r12,QWORD PTR[24+rsi]
 2813     mov QWORD PTR[32+rsp],r10
 2814     mov QWORD PTR[40+rsp],r11
 2815     mov QWORD PTR[48+rsp],r12
 2816     mov QWORD PTR[56+rsp],rcx
 2817     call    QWORD PTR[__imp_RtlVirtualUnwind]
 2818 
 2819     mov eax,1
 2820     add rsp,64
 2821     popfq
 2822     pop r15
 2823     pop r14
 2824     pop r13
 2825     pop r12
 2826     pop rbp
 2827     pop rbx
 2828     pop rdi
 2829     pop rsi
 2830     DB  0F3h,0C3h       ;repret
 2831 cbc_se_handler  ENDP
 2832 
 2833 .text$  ENDS
 2834 .pdata  SEGMENT READONLY ALIGN(4)
 2835 ALIGN   4
 2836     DD  imagerel $L$SEH_begin_AES_encrypt
 2837     DD  imagerel $L$SEH_end_AES_encrypt
 2838     DD  imagerel $L$SEH_info_AES_encrypt
 2839 
 2840     DD  imagerel $L$SEH_begin_AES_decrypt
 2841     DD  imagerel $L$SEH_end_AES_decrypt
 2842     DD  imagerel $L$SEH_info_AES_decrypt
 2843 
 2844     DD  imagerel $L$SEH_begin_AES_set_encrypt_key
 2845     DD  imagerel $L$SEH_end_AES_set_encrypt_key
 2846     DD  imagerel $L$SEH_info_AES_set_encrypt_key
 2847 
 2848     DD  imagerel $L$SEH_begin_AES_set_decrypt_key
 2849     DD  imagerel $L$SEH_end_AES_set_decrypt_key
 2850     DD  imagerel $L$SEH_info_AES_set_decrypt_key
 2851 
 2852     DD  imagerel $L$SEH_begin_AES_cbc_encrypt
 2853     DD  imagerel $L$SEH_end_AES_cbc_encrypt
 2854     DD  imagerel $L$SEH_info_AES_cbc_encrypt
 2855 
 2856 .pdata  ENDS
 2857 .xdata  SEGMENT READONLY ALIGN(8)
 2858 ALIGN   8
 2859 $L$SEH_info_AES_encrypt::
 2860 DB  9,0,0,0
 2861     DD  imagerel block_se_handler
 2862     DD  imagerel $L$enc_prologue,imagerel $L$enc_epilogue   
 2863 $L$SEH_info_AES_decrypt::
 2864 DB  9,0,0,0
 2865     DD  imagerel block_se_handler
 2866     DD  imagerel $L$dec_prologue,imagerel $L$dec_epilogue   
 2867 $L$SEH_info_AES_set_encrypt_key::
 2868 DB  9,0,0,0
 2869     DD  imagerel key_se_handler
 2870     DD  imagerel $L$enc_key_prologue,imagerel $L$enc_key_epilogue   
 2871 $L$SEH_info_AES_set_decrypt_key::
 2872 DB  9,0,0,0
 2873     DD  imagerel key_se_handler
 2874     DD  imagerel $L$dec_key_prologue,imagerel $L$dec_key_epilogue   
 2875 $L$SEH_info_AES_cbc_encrypt::
 2876 DB  9,0,0,0
 2877     DD  imagerel cbc_se_handler
 2878 
 2879 .xdata  ENDS
 2880 END