1default	rel
2%define XMMWORD
3%define YMMWORD
4%define ZMMWORD
5section	.text code align=64
6
7
8ALIGN	16
9_x86_64_AES_encrypt:
10	xor	eax,DWORD[r15]
11	xor	ebx,DWORD[4+r15]
12	xor	ecx,DWORD[8+r15]
13	xor	edx,DWORD[12+r15]
14
15	mov	r13d,DWORD[240+r15]
16	sub	r13d,1
17	jmp	NEAR $L$enc_loop
18ALIGN	16
19$L$enc_loop:
20
21	movzx	esi,al
22	movzx	edi,bl
23	movzx	ebp,cl
24	mov	r10d,DWORD[rsi*8+r14]
25	mov	r11d,DWORD[rdi*8+r14]
26	mov	r12d,DWORD[rbp*8+r14]
27
28	movzx	esi,bh
29	movzx	edi,ch
30	movzx	ebp,dl
31	xor	r10d,DWORD[3+rsi*8+r14]
32	xor	r11d,DWORD[3+rdi*8+r14]
33	mov	r8d,DWORD[rbp*8+r14]
34
35	movzx	esi,dh
36	shr	ecx,16
37	movzx	ebp,ah
38	xor	r12d,DWORD[3+rsi*8+r14]
39	shr	edx,16
40	xor	r8d,DWORD[3+rbp*8+r14]
41
42	shr	ebx,16
43	lea	r15,[16+r15]
44	shr	eax,16
45
46	movzx	esi,cl
47	movzx	edi,dl
48	movzx	ebp,al
49	xor	r10d,DWORD[2+rsi*8+r14]
50	xor	r11d,DWORD[2+rdi*8+r14]
51	xor	r12d,DWORD[2+rbp*8+r14]
52
53	movzx	esi,dh
54	movzx	edi,ah
55	movzx	ebp,bl
56	xor	r10d,DWORD[1+rsi*8+r14]
57	xor	r11d,DWORD[1+rdi*8+r14]
58	xor	r8d,DWORD[2+rbp*8+r14]
59
60	mov	edx,DWORD[12+r15]
61	movzx	edi,bh
62	movzx	ebp,ch
63	mov	eax,DWORD[r15]
64	xor	r12d,DWORD[1+rdi*8+r14]
65	xor	r8d,DWORD[1+rbp*8+r14]
66
67	mov	ebx,DWORD[4+r15]
68	mov	ecx,DWORD[8+r15]
69	xor	eax,r10d
70	xor	ebx,r11d
71	xor	ecx,r12d
72	xor	edx,r8d
73	sub	r13d,1
74	jnz	NEAR $L$enc_loop
75	movzx	esi,al
76	movzx	edi,bl
77	movzx	ebp,cl
78	movzx	r10d,BYTE[2+rsi*8+r14]
79	movzx	r11d,BYTE[2+rdi*8+r14]
80	movzx	r12d,BYTE[2+rbp*8+r14]
81
82	movzx	esi,dl
83	movzx	edi,bh
84	movzx	ebp,ch
85	movzx	r8d,BYTE[2+rsi*8+r14]
86	mov	edi,DWORD[rdi*8+r14]
87	mov	ebp,DWORD[rbp*8+r14]
88
89	and	edi,0x0000ff00
90	and	ebp,0x0000ff00
91
92	xor	r10d,edi
93	xor	r11d,ebp
94	shr	ecx,16
95
96	movzx	esi,dh
97	movzx	edi,ah
98	shr	edx,16
99	mov	esi,DWORD[rsi*8+r14]
100	mov	edi,DWORD[rdi*8+r14]
101
102	and	esi,0x0000ff00
103	and	edi,0x0000ff00
104	shr	ebx,16
105	xor	r12d,esi
106	xor	r8d,edi
107	shr	eax,16
108
109	movzx	esi,cl
110	movzx	edi,dl
111	movzx	ebp,al
112	mov	esi,DWORD[rsi*8+r14]
113	mov	edi,DWORD[rdi*8+r14]
114	mov	ebp,DWORD[rbp*8+r14]
115
116	and	esi,0x00ff0000
117	and	edi,0x00ff0000
118	and	ebp,0x00ff0000
119
120	xor	r10d,esi
121	xor	r11d,edi
122	xor	r12d,ebp
123
124	movzx	esi,bl
125	movzx	edi,dh
126	movzx	ebp,ah
127	mov	esi,DWORD[rsi*8+r14]
128	mov	edi,DWORD[2+rdi*8+r14]
129	mov	ebp,DWORD[2+rbp*8+r14]
130
131	and	esi,0x00ff0000
132	and	edi,0xff000000
133	and	ebp,0xff000000
134
135	xor	r8d,esi
136	xor	r10d,edi
137	xor	r11d,ebp
138
139	movzx	esi,bh
140	movzx	edi,ch
141	mov	edx,DWORD[((16+12))+r15]
142	mov	esi,DWORD[2+rsi*8+r14]
143	mov	edi,DWORD[2+rdi*8+r14]
144	mov	eax,DWORD[((16+0))+r15]
145
146	and	esi,0xff000000
147	and	edi,0xff000000
148
149	xor	r12d,esi
150	xor	r8d,edi
151
152	mov	ebx,DWORD[((16+4))+r15]
153	mov	ecx,DWORD[((16+8))+r15]
154	xor	eax,r10d
155	xor	ebx,r11d
156	xor	ecx,r12d
157	xor	edx,r8d
158DB	0xf3,0xc3
159
160
161ALIGN	16
162_x86_64_AES_encrypt_compact:
163	lea	r8,[128+r14]
164	mov	edi,DWORD[((0-128))+r8]
165	mov	ebp,DWORD[((32-128))+r8]
166	mov	r10d,DWORD[((64-128))+r8]
167	mov	r11d,DWORD[((96-128))+r8]
168	mov	edi,DWORD[((128-128))+r8]
169	mov	ebp,DWORD[((160-128))+r8]
170	mov	r10d,DWORD[((192-128))+r8]
171	mov	r11d,DWORD[((224-128))+r8]
172	jmp	NEAR $L$enc_loop_compact
173ALIGN	16
174$L$enc_loop_compact:
175	xor	eax,DWORD[r15]
176	xor	ebx,DWORD[4+r15]
177	xor	ecx,DWORD[8+r15]
178	xor	edx,DWORD[12+r15]
179	lea	r15,[16+r15]
180	movzx	r10d,al
181	movzx	r11d,bl
182	movzx	r12d,cl
183	movzx	r8d,dl
184	movzx	esi,bh
185	movzx	edi,ch
186	shr	ecx,16
187	movzx	ebp,dh
188	movzx	r10d,BYTE[r10*1+r14]
189	movzx	r11d,BYTE[r11*1+r14]
190	movzx	r12d,BYTE[r12*1+r14]
191	movzx	r8d,BYTE[r8*1+r14]
192
193	movzx	r9d,BYTE[rsi*1+r14]
194	movzx	esi,ah
195	movzx	r13d,BYTE[rdi*1+r14]
196	movzx	edi,cl
197	movzx	ebp,BYTE[rbp*1+r14]
198	movzx	esi,BYTE[rsi*1+r14]
199
200	shl	r9d,8
201	shr	edx,16
202	shl	r13d,8
203	xor	r10d,r9d
204	shr	eax,16
205	movzx	r9d,dl
206	shr	ebx,16
207	xor	r11d,r13d
208	shl	ebp,8
209	movzx	r13d,al
210	movzx	edi,BYTE[rdi*1+r14]
211	xor	r12d,ebp
212
213	shl	esi,8
214	movzx	ebp,bl
215	shl	edi,16
216	xor	r8d,esi
217	movzx	r9d,BYTE[r9*1+r14]
218	movzx	esi,dh
219	movzx	r13d,BYTE[r13*1+r14]
220	xor	r10d,edi
221
222	shr	ecx,8
223	movzx	edi,ah
224	shl	r9d,16
225	shr	ebx,8
226	shl	r13d,16
227	xor	r11d,r9d
228	movzx	ebp,BYTE[rbp*1+r14]
229	movzx	esi,BYTE[rsi*1+r14]
230	movzx	edi,BYTE[rdi*1+r14]
231	movzx	edx,BYTE[rcx*1+r14]
232	movzx	ecx,BYTE[rbx*1+r14]
233
234	shl	ebp,16
235	xor	r12d,r13d
236	shl	esi,24
237	xor	r8d,ebp
238	shl	edi,24
239	xor	r10d,esi
240	shl	edx,24
241	xor	r11d,edi
242	shl	ecx,24
243	mov	eax,r10d
244	mov	ebx,r11d
245	xor	ecx,r12d
246	xor	edx,r8d
247	cmp	r15,QWORD[16+rsp]
248	je	NEAR $L$enc_compact_done
249	mov	r10d,0x80808080
250	mov	r11d,0x80808080
251	and	r10d,eax
252	and	r11d,ebx
253	mov	esi,r10d
254	mov	edi,r11d
255	shr	r10d,7
256	lea	r8d,[rax*1+rax]
257	shr	r11d,7
258	lea	r9d,[rbx*1+rbx]
259	sub	esi,r10d
260	sub	edi,r11d
261	and	r8d,0xfefefefe
262	and	r9d,0xfefefefe
263	and	esi,0x1b1b1b1b
264	and	edi,0x1b1b1b1b
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	r12d,0x80808080
273	rol	eax,24
274	mov	ebp,0x80808080
275	rol	ebx,24
276	and	r12d,ecx
277	and	ebp,edx
278	xor	eax,r8d
279	xor	ebx,r9d
280	mov	esi,r12d
281	ror	r10d,16
282	mov	edi,ebp
283	ror	r11d,16
284	lea	r8d,[rcx*1+rcx]
285	shr	r12d,7
286	xor	eax,r10d
287	shr	ebp,7
288	xor	ebx,r11d
289	ror	r10d,8
290	lea	r9d,[rdx*1+rdx]
291	ror	r11d,8
292	sub	esi,r12d
293	sub	edi,ebp
294	xor	eax,r10d
295	xor	ebx,r11d
296
297	and	r8d,0xfefefefe
298	and	r9d,0xfefefefe
299	and	esi,0x1b1b1b1b
300	and	edi,0x1b1b1b1b
301	mov	r12d,ecx
302	mov	ebp,edx
303	xor	r8d,esi
304	xor	r9d,edi
305
306	ror	r12d,16
307	xor	ecx,r8d
308	ror	ebp,16
309	xor	edx,r9d
310	rol	ecx,24
311	mov	esi,DWORD[r14]
312	rol	edx,24
313	xor	ecx,r8d
314	mov	edi,DWORD[64+r14]
315	xor	edx,r9d
316	mov	r8d,DWORD[128+r14]
317	xor	ecx,r12d
318	ror	r12d,8
319	xor	edx,ebp
320	ror	ebp,8
321	xor	ecx,r12d
322	mov	r9d,DWORD[192+r14]
323	xor	edx,ebp
324	jmp	NEAR $L$enc_loop_compact
325ALIGN	16
326$L$enc_compact_done:
327	xor	eax,DWORD[r15]
328	xor	ebx,DWORD[4+r15]
329	xor	ecx,DWORD[8+r15]
330	xor	edx,DWORD[12+r15]
331DB	0xf3,0xc3
332
333ALIGN	16
334global	asm_AES_encrypt
335
336
337asm_AES_encrypt:
338	mov	QWORD[8+rsp],rdi	;WIN64 prologue
339	mov	QWORD[16+rsp],rsi
340	mov	rax,rsp
341$L$SEH_begin_asm_AES_encrypt:
342	mov	rdi,rcx
343	mov	rsi,rdx
344	mov	rdx,r8
345
346
347	push	rbx
348	push	rbp
349	push	r12
350	push	r13
351	push	r14
352	push	r15
353
354
355	mov	r10,rsp
356	lea	rcx,[((-63))+rdx]
357	and	rsp,-64
358	sub	rcx,rsp
359	neg	rcx
360	and	rcx,0x3c0
361	sub	rsp,rcx
362	sub	rsp,32
363
364	mov	QWORD[16+rsp],rsi
365	mov	QWORD[24+rsp],r10
366$L$enc_prologue:
367
368	mov	r15,rdx
369	mov	r13d,DWORD[240+r15]
370
371	mov	eax,DWORD[rdi]
372	mov	ebx,DWORD[4+rdi]
373	mov	ecx,DWORD[8+rdi]
374	mov	edx,DWORD[12+rdi]
375
376	shl	r13d,4
377	lea	rbp,[r13*1+r15]
378	mov	QWORD[rsp],r15
379	mov	QWORD[8+rsp],rbp
380
381
382	lea	r14,[(($L$AES_Te+2048))]
383	lea	rbp,[768+rsp]
384	sub	rbp,r14
385	and	rbp,0x300
386	lea	r14,[rbp*1+r14]
387
388	call	_x86_64_AES_encrypt_compact
389
390	mov	r9,QWORD[16+rsp]
391	mov	rsi,QWORD[24+rsp]
392	mov	DWORD[r9],eax
393	mov	DWORD[4+r9],ebx
394	mov	DWORD[8+r9],ecx
395	mov	DWORD[12+r9],edx
396
397	mov	r15,QWORD[rsi]
398	mov	r14,QWORD[8+rsi]
399	mov	r13,QWORD[16+rsi]
400	mov	r12,QWORD[24+rsi]
401	mov	rbp,QWORD[32+rsi]
402	mov	rbx,QWORD[40+rsi]
403	lea	rsp,[48+rsi]
404$L$enc_epilogue:
405	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
406	mov	rsi,QWORD[16+rsp]
407	DB	0F3h,0C3h		;repret
408$L$SEH_end_asm_AES_encrypt:
409
410ALIGN	16
411_x86_64_AES_decrypt:
412	xor	eax,DWORD[r15]
413	xor	ebx,DWORD[4+r15]
414	xor	ecx,DWORD[8+r15]
415	xor	edx,DWORD[12+r15]
416
417	mov	r13d,DWORD[240+r15]
418	sub	r13d,1
419	jmp	NEAR $L$dec_loop
420ALIGN	16
421$L$dec_loop:
422
423	movzx	esi,al
424	movzx	edi,bl
425	movzx	ebp,cl
426	mov	r10d,DWORD[rsi*8+r14]
427	mov	r11d,DWORD[rdi*8+r14]
428	mov	r12d,DWORD[rbp*8+r14]
429
430	movzx	esi,dh
431	movzx	edi,ah
432	movzx	ebp,dl
433	xor	r10d,DWORD[3+rsi*8+r14]
434	xor	r11d,DWORD[3+rdi*8+r14]
435	mov	r8d,DWORD[rbp*8+r14]
436
437	movzx	esi,bh
438	shr	eax,16
439	movzx	ebp,ch
440	xor	r12d,DWORD[3+rsi*8+r14]
441	shr	edx,16
442	xor	r8d,DWORD[3+rbp*8+r14]
443
444	shr	ebx,16
445	lea	r15,[16+r15]
446	shr	ecx,16
447
448	movzx	esi,cl
449	movzx	edi,dl
450	movzx	ebp,al
451	xor	r10d,DWORD[2+rsi*8+r14]
452	xor	r11d,DWORD[2+rdi*8+r14]
453	xor	r12d,DWORD[2+rbp*8+r14]
454
455	movzx	esi,bh
456	movzx	edi,ch
457	movzx	ebp,bl
458	xor	r10d,DWORD[1+rsi*8+r14]
459	xor	r11d,DWORD[1+rdi*8+r14]
460	xor	r8d,DWORD[2+rbp*8+r14]
461
462	movzx	esi,dh
463	mov	edx,DWORD[12+r15]
464	movzx	ebp,ah
465	xor	r12d,DWORD[1+rsi*8+r14]
466	mov	eax,DWORD[r15]
467	xor	r8d,DWORD[1+rbp*8+r14]
468
469	xor	eax,r10d
470	mov	ebx,DWORD[4+r15]
471	mov	ecx,DWORD[8+r15]
472	xor	ecx,r12d
473	xor	ebx,r11d
474	xor	edx,r8d
475	sub	r13d,1
476	jnz	NEAR $L$dec_loop
477	lea	r14,[2048+r14]
478	movzx	esi,al
479	movzx	edi,bl
480	movzx	ebp,cl
481	movzx	r10d,BYTE[rsi*1+r14]
482	movzx	r11d,BYTE[rdi*1+r14]
483	movzx	r12d,BYTE[rbp*1+r14]
484
485	movzx	esi,dl
486	movzx	edi,dh
487	movzx	ebp,ah
488	movzx	r8d,BYTE[rsi*1+r14]
489	movzx	edi,BYTE[rdi*1+r14]
490	movzx	ebp,BYTE[rbp*1+r14]
491
492	shl	edi,8
493	shl	ebp,8
494
495	xor	r10d,edi
496	xor	r11d,ebp
497	shr	edx,16
498
499	movzx	esi,bh
500	movzx	edi,ch
501	shr	eax,16
502	movzx	esi,BYTE[rsi*1+r14]
503	movzx	edi,BYTE[rdi*1+r14]
504
505	shl	esi,8
506	shl	edi,8
507	shr	ebx,16
508	xor	r12d,esi
509	xor	r8d,edi
510	shr	ecx,16
511
512	movzx	esi,cl
513	movzx	edi,dl
514	movzx	ebp,al
515	movzx	esi,BYTE[rsi*1+r14]
516	movzx	edi,BYTE[rdi*1+r14]
517	movzx	ebp,BYTE[rbp*1+r14]
518
519	shl	esi,16
520	shl	edi,16
521	shl	ebp,16
522
523	xor	r10d,esi
524	xor	r11d,edi
525	xor	r12d,ebp
526
527	movzx	esi,bl
528	movzx	edi,bh
529	movzx	ebp,ch
530	movzx	esi,BYTE[rsi*1+r14]
531	movzx	edi,BYTE[rdi*1+r14]
532	movzx	ebp,BYTE[rbp*1+r14]
533
534	shl	esi,16
535	shl	edi,24
536	shl	ebp,24
537
538	xor	r8d,esi
539	xor	r10d,edi
540	xor	r11d,ebp
541
542	movzx	esi,dh
543	movzx	edi,ah
544	mov	edx,DWORD[((16+12))+r15]
545	movzx	esi,BYTE[rsi*1+r14]
546	movzx	edi,BYTE[rdi*1+r14]
547	mov	eax,DWORD[((16+0))+r15]
548
549	shl	esi,24
550	shl	edi,24
551
552	xor	r12d,esi
553	xor	r8d,edi
554
555	mov	ebx,DWORD[((16+4))+r15]
556	mov	ecx,DWORD[((16+8))+r15]
557	lea	r14,[((-2048))+r14]
558	xor	eax,r10d
559	xor	ebx,r11d
560	xor	ecx,r12d
561	xor	edx,r8d
562DB	0xf3,0xc3
563
564
565ALIGN	16
566_x86_64_AES_decrypt_compact:
567	lea	r8,[128+r14]
568	mov	edi,DWORD[((0-128))+r8]
569	mov	ebp,DWORD[((32-128))+r8]
570	mov	r10d,DWORD[((64-128))+r8]
571	mov	r11d,DWORD[((96-128))+r8]
572	mov	edi,DWORD[((128-128))+r8]
573	mov	ebp,DWORD[((160-128))+r8]
574	mov	r10d,DWORD[((192-128))+r8]
575	mov	r11d,DWORD[((224-128))+r8]
576	jmp	NEAR $L$dec_loop_compact
577
578ALIGN	16
579$L$dec_loop_compact:
580	xor	eax,DWORD[r15]
581	xor	ebx,DWORD[4+r15]
582	xor	ecx,DWORD[8+r15]
583	xor	edx,DWORD[12+r15]
584	lea	r15,[16+r15]
585	movzx	r10d,al
586	movzx	r11d,bl
587	movzx	r12d,cl
588	movzx	r8d,dl
589	movzx	esi,dh
590	movzx	edi,ah
591	shr	edx,16
592	movzx	ebp,bh
593	movzx	r10d,BYTE[r10*1+r14]
594	movzx	r11d,BYTE[r11*1+r14]
595	movzx	r12d,BYTE[r12*1+r14]
596	movzx	r8d,BYTE[r8*1+r14]
597
598	movzx	r9d,BYTE[rsi*1+r14]
599	movzx	esi,ch
600	movzx	r13d,BYTE[rdi*1+r14]
601	movzx	ebp,BYTE[rbp*1+r14]
602	movzx	esi,BYTE[rsi*1+r14]
603
604	shr	ecx,16
605	shl	r13d,8
606	shl	r9d,8
607	movzx	edi,cl
608	shr	eax,16
609	xor	r10d,r9d
610	shr	ebx,16
611	movzx	r9d,dl
612
613	shl	ebp,8
614	xor	r11d,r13d
615	shl	esi,8
616	movzx	r13d,al
617	movzx	edi,BYTE[rdi*1+r14]
618	xor	r12d,ebp
619	movzx	ebp,bl
620
621	shl	edi,16
622	xor	r8d,esi
623	movzx	r9d,BYTE[r9*1+r14]
624	movzx	esi,bh
625	movzx	ebp,BYTE[rbp*1+r14]
626	xor	r10d,edi
627	movzx	r13d,BYTE[r13*1+r14]
628	movzx	edi,ch
629
630	shl	ebp,16
631	shl	r9d,16
632	shl	r13d,16
633	xor	r8d,ebp
634	movzx	ebp,dh
635	xor	r11d,r9d
636	shr	eax,8
637	xor	r12d,r13d
638
639	movzx	esi,BYTE[rsi*1+r14]
640	movzx	ebx,BYTE[rdi*1+r14]
641	movzx	ecx,BYTE[rbp*1+r14]
642	movzx	edx,BYTE[rax*1+r14]
643
644	mov	eax,r10d
645	shl	esi,24
646	shl	ebx,24
647	shl	ecx,24
648	xor	eax,esi
649	shl	edx,24
650	xor	ebx,r11d
651	xor	ecx,r12d
652	xor	edx,r8d
653	cmp	r15,QWORD[16+rsp]
654	je	NEAR $L$dec_compact_done
655
656	mov	rsi,QWORD[((256+0))+r14]
657	shl	rbx,32
658	shl	rdx,32
659	mov	rdi,QWORD[((256+8))+r14]
660	or	rax,rbx
661	or	rcx,rdx
662	mov	rbp,QWORD[((256+16))+r14]
663	mov	r9,rsi
664	mov	r12,rsi
665	and	r9,rax
666	and	r12,rcx
667	mov	rbx,r9
668	mov	rdx,r12
669	shr	r9,7
670	lea	r8,[rax*1+rax]
671	shr	r12,7
672	lea	r11,[rcx*1+rcx]
673	sub	rbx,r9
674	sub	rdx,r12
675	and	r8,rdi
676	and	r11,rdi
677	and	rbx,rbp
678	and	rdx,rbp
679	xor	r8,rbx
680	xor	r11,rdx
681	mov	r10,rsi
682	mov	r13,rsi
683
684	and	r10,r8
685	and	r13,r11
686	mov	rbx,r10
687	mov	rdx,r13
688	shr	r10,7
689	lea	r9,[r8*1+r8]
690	shr	r13,7
691	lea	r12,[r11*1+r11]
692	sub	rbx,r10
693	sub	rdx,r13
694	and	r9,rdi
695	and	r12,rdi
696	and	rbx,rbp
697	and	rdx,rbp
698	xor	r9,rbx
699	xor	r12,rdx
700	mov	r10,rsi
701	mov	r13,rsi
702
703	and	r10,r9
704	and	r13,r12
705	mov	rbx,r10
706	mov	rdx,r13
707	shr	r10,7
708	xor	r8,rax
709	shr	r13,7
710	xor	r11,rcx
711	sub	rbx,r10
712	sub	rdx,r13
713	lea	r10,[r9*1+r9]
714	lea	r13,[r12*1+r12]
715	xor	r9,rax
716	xor	r12,rcx
717	and	r10,rdi
718	and	r13,rdi
719	and	rbx,rbp
720	and	rdx,rbp
721	xor	r10,rbx
722	xor	r13,rdx
723
724	xor	rax,r10
725	xor	rcx,r13
726	xor	r8,r10
727	xor	r11,r13
728	mov	rbx,rax
729	mov	rdx,rcx
730	xor	r9,r10
731	shr	rbx,32
732	xor	r12,r13
733	shr	rdx,32
734	xor	r10,r8
735	rol	eax,8
736	xor	r13,r11
737	rol	ecx,8
738	xor	r10,r9
739	rol	ebx,8
740	xor	r13,r12
741
742	rol	edx,8
743	xor	eax,r10d
744	shr	r10,32
745	xor	ecx,r13d
746	shr	r13,32
747	xor	ebx,r10d
748	xor	edx,r13d
749
750	mov	r10,r8
751	rol	r8d,24
752	mov	r13,r11
753	rol	r11d,24
754	shr	r10,32
755	xor	eax,r8d
756	shr	r13,32
757	xor	ecx,r11d
758	rol	r10d,24
759	mov	r8,r9
760	rol	r13d,24
761	mov	r11,r12
762	shr	r8,32
763	xor	ebx,r10d
764	shr	r11,32
765	xor	edx,r13d
766
767	mov	rsi,QWORD[r14]
768	rol	r9d,16
769	mov	rdi,QWORD[64+r14]
770	rol	r12d,16
771	mov	rbp,QWORD[128+r14]
772	rol	r8d,16
773	mov	r10,QWORD[192+r14]
774	xor	eax,r9d
775	rol	r11d,16
776	xor	ecx,r12d
777	mov	r13,QWORD[256+r14]
778	xor	ebx,r8d
779	xor	edx,r11d
780	jmp	NEAR $L$dec_loop_compact
781ALIGN	16
782$L$dec_compact_done:
783	xor	eax,DWORD[r15]
784	xor	ebx,DWORD[4+r15]
785	xor	ecx,DWORD[8+r15]
786	xor	edx,DWORD[12+r15]
787DB	0xf3,0xc3
788
789ALIGN	16
790global	asm_AES_decrypt
791
792
793asm_AES_decrypt:
794	mov	QWORD[8+rsp],rdi	;WIN64 prologue
795	mov	QWORD[16+rsp],rsi
796	mov	rax,rsp
797$L$SEH_begin_asm_AES_decrypt:
798	mov	rdi,rcx
799	mov	rsi,rdx
800	mov	rdx,r8
801
802
803	push	rbx
804	push	rbp
805	push	r12
806	push	r13
807	push	r14
808	push	r15
809
810
811	mov	r10,rsp
812	lea	rcx,[((-63))+rdx]
813	and	rsp,-64
814	sub	rcx,rsp
815	neg	rcx
816	and	rcx,0x3c0
817	sub	rsp,rcx
818	sub	rsp,32
819
820	mov	QWORD[16+rsp],rsi
821	mov	QWORD[24+rsp],r10
822$L$dec_prologue:
823
824	mov	r15,rdx
825	mov	r13d,DWORD[240+r15]
826
827	mov	eax,DWORD[rdi]
828	mov	ebx,DWORD[4+rdi]
829	mov	ecx,DWORD[8+rdi]
830	mov	edx,DWORD[12+rdi]
831
832	shl	r13d,4
833	lea	rbp,[r13*1+r15]
834	mov	QWORD[rsp],r15
835	mov	QWORD[8+rsp],rbp
836
837
838	lea	r14,[(($L$AES_Td+2048))]
839	lea	rbp,[768+rsp]
840	sub	rbp,r14
841	and	rbp,0x300
842	lea	r14,[rbp*1+r14]
843	shr	rbp,3
844	add	r14,rbp
845
846	call	_x86_64_AES_decrypt_compact
847
848	mov	r9,QWORD[16+rsp]
849	mov	rsi,QWORD[24+rsp]
850	mov	DWORD[r9],eax
851	mov	DWORD[4+r9],ebx
852	mov	DWORD[8+r9],ecx
853	mov	DWORD[12+r9],edx
854
855	mov	r15,QWORD[rsi]
856	mov	r14,QWORD[8+rsi]
857	mov	r13,QWORD[16+rsi]
858	mov	r12,QWORD[24+rsi]
859	mov	rbp,QWORD[32+rsi]
860	mov	rbx,QWORD[40+rsi]
861	lea	rsp,[48+rsi]
862$L$dec_epilogue:
863	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
864	mov	rsi,QWORD[16+rsp]
865	DB	0F3h,0C3h		;repret
866$L$SEH_end_asm_AES_decrypt:
867ALIGN	16
868global	asm_AES_set_encrypt_key
869
870asm_AES_set_encrypt_key:
871	mov	QWORD[8+rsp],rdi	;WIN64 prologue
872	mov	QWORD[16+rsp],rsi
873	mov	rax,rsp
874$L$SEH_begin_asm_AES_set_encrypt_key:
875	mov	rdi,rcx
876	mov	rsi,rdx
877	mov	rdx,r8
878
879
880	push	rbx
881	push	rbp
882	push	r12
883	push	r13
884	push	r14
885	push	r15
886	sub	rsp,8
887$L$enc_key_prologue:
888
889	call	_x86_64_AES_set_encrypt_key
890
891	mov	rbp,QWORD[40+rsp]
892	mov	rbx,QWORD[48+rsp]
893	add	rsp,56
894$L$enc_key_epilogue:
895	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
896	mov	rsi,QWORD[16+rsp]
897	DB	0F3h,0C3h		;repret
898$L$SEH_end_asm_AES_set_encrypt_key:
899
900
901ALIGN	16
902_x86_64_AES_set_encrypt_key:
903	mov	ecx,esi
904	mov	rsi,rdi
905	mov	rdi,rdx
906
907	test	rsi,-1
908	jz	NEAR $L$badpointer
909	test	rdi,-1
910	jz	NEAR $L$badpointer
911
912	lea	rbp,[$L$AES_Te]
913	lea	rbp,[((2048+128))+rbp]
914
915
916	mov	eax,DWORD[((0-128))+rbp]
917	mov	ebx,DWORD[((32-128))+rbp]
918	mov	r8d,DWORD[((64-128))+rbp]
919	mov	edx,DWORD[((96-128))+rbp]
920	mov	eax,DWORD[((128-128))+rbp]
921	mov	ebx,DWORD[((160-128))+rbp]
922	mov	r8d,DWORD[((192-128))+rbp]
923	mov	edx,DWORD[((224-128))+rbp]
924
925	cmp	ecx,128
926	je	NEAR $L$10rounds
927	cmp	ecx,192
928	je	NEAR $L$12rounds
929	cmp	ecx,256
930	je	NEAR $L$14rounds
931	mov	rax,-2
932	jmp	NEAR $L$exit
933
934$L$10rounds:
935	mov	rax,QWORD[rsi]
936	mov	rdx,QWORD[8+rsi]
937	mov	QWORD[rdi],rax
938	mov	QWORD[8+rdi],rdx
939
940	shr	rdx,32
941	xor	ecx,ecx
942	jmp	NEAR $L$10shortcut
943ALIGN	4
944$L$10loop:
945	mov	eax,DWORD[rdi]
946	mov	edx,DWORD[12+rdi]
947$L$10shortcut:
948	movzx	esi,dl
949	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
950	movzx	esi,dh
951	shl	ebx,24
952	xor	eax,ebx
953
954	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
955	shr	edx,16
956	movzx	esi,dl
957	xor	eax,ebx
958
959	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
960	movzx	esi,dh
961	shl	ebx,8
962	xor	eax,ebx
963
964	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
965	shl	ebx,16
966	xor	eax,ebx
967
968	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
969	mov	DWORD[16+rdi],eax
970	xor	eax,DWORD[4+rdi]
971	mov	DWORD[20+rdi],eax
972	xor	eax,DWORD[8+rdi]
973	mov	DWORD[24+rdi],eax
974	xor	eax,DWORD[12+rdi]
975	mov	DWORD[28+rdi],eax
976	add	ecx,1
977	lea	rdi,[16+rdi]
978	cmp	ecx,10
979	jl	NEAR $L$10loop
980
981	mov	DWORD[80+rdi],10
982	xor	rax,rax
983	jmp	NEAR $L$exit
984
985$L$12rounds:
986	mov	rax,QWORD[rsi]
987	mov	rbx,QWORD[8+rsi]
988	mov	rdx,QWORD[16+rsi]
989	mov	QWORD[rdi],rax
990	mov	QWORD[8+rdi],rbx
991	mov	QWORD[16+rdi],rdx
992
993	shr	rdx,32
994	xor	ecx,ecx
995	jmp	NEAR $L$12shortcut
996ALIGN	4
997$L$12loop:
998	mov	eax,DWORD[rdi]
999	mov	edx,DWORD[20+rdi]
1000$L$12shortcut:
1001	movzx	esi,dl
1002	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1003	movzx	esi,dh
1004	shl	ebx,24
1005	xor	eax,ebx
1006
1007	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1008	shr	edx,16
1009	movzx	esi,dl
1010	xor	eax,ebx
1011
1012	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1013	movzx	esi,dh
1014	shl	ebx,8
1015	xor	eax,ebx
1016
1017	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1018	shl	ebx,16
1019	xor	eax,ebx
1020
1021	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
1022	mov	DWORD[24+rdi],eax
1023	xor	eax,DWORD[4+rdi]
1024	mov	DWORD[28+rdi],eax
1025	xor	eax,DWORD[8+rdi]
1026	mov	DWORD[32+rdi],eax
1027	xor	eax,DWORD[12+rdi]
1028	mov	DWORD[36+rdi],eax
1029
1030	cmp	ecx,7
1031	je	NEAR $L$12break
1032	add	ecx,1
1033
1034	xor	eax,DWORD[16+rdi]
1035	mov	DWORD[40+rdi],eax
1036	xor	eax,DWORD[20+rdi]
1037	mov	DWORD[44+rdi],eax
1038
1039	lea	rdi,[24+rdi]
1040	jmp	NEAR $L$12loop
1041$L$12break:
1042	mov	DWORD[72+rdi],12
1043	xor	rax,rax
1044	jmp	NEAR $L$exit
1045
1046$L$14rounds:
1047	mov	rax,QWORD[rsi]
1048	mov	rbx,QWORD[8+rsi]
1049	mov	rcx,QWORD[16+rsi]
1050	mov	rdx,QWORD[24+rsi]
1051	mov	QWORD[rdi],rax
1052	mov	QWORD[8+rdi],rbx
1053	mov	QWORD[16+rdi],rcx
1054	mov	QWORD[24+rdi],rdx
1055
1056	shr	rdx,32
1057	xor	ecx,ecx
1058	jmp	NEAR $L$14shortcut
1059ALIGN	4
1060$L$14loop:
1061	mov	eax,DWORD[rdi]
1062	mov	edx,DWORD[28+rdi]
1063$L$14shortcut:
1064	movzx	esi,dl
1065	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1066	movzx	esi,dh
1067	shl	ebx,24
1068	xor	eax,ebx
1069
1070	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1071	shr	edx,16
1072	movzx	esi,dl
1073	xor	eax,ebx
1074
1075	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1076	movzx	esi,dh
1077	shl	ebx,8
1078	xor	eax,ebx
1079
1080	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1081	shl	ebx,16
1082	xor	eax,ebx
1083
1084	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
1085	mov	DWORD[32+rdi],eax
1086	xor	eax,DWORD[4+rdi]
1087	mov	DWORD[36+rdi],eax
1088	xor	eax,DWORD[8+rdi]
1089	mov	DWORD[40+rdi],eax
1090	xor	eax,DWORD[12+rdi]
1091	mov	DWORD[44+rdi],eax
1092
1093	cmp	ecx,6
1094	je	NEAR $L$14break
1095	add	ecx,1
1096
1097	mov	edx,eax
1098	mov	eax,DWORD[16+rdi]
1099	movzx	esi,dl
1100	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1101	movzx	esi,dh
1102	xor	eax,ebx
1103
1104	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1105	shr	edx,16
1106	shl	ebx,8
1107	movzx	esi,dl
1108	xor	eax,ebx
1109
1110	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1111	movzx	esi,dh
1112	shl	ebx,16
1113	xor	eax,ebx
1114
1115	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1116	shl	ebx,24
1117	xor	eax,ebx
1118
1119	mov	DWORD[48+rdi],eax
1120	xor	eax,DWORD[20+rdi]
1121	mov	DWORD[52+rdi],eax
1122	xor	eax,DWORD[24+rdi]
1123	mov	DWORD[56+rdi],eax
1124	xor	eax,DWORD[28+rdi]
1125	mov	DWORD[60+rdi],eax
1126
1127	lea	rdi,[32+rdi]
1128	jmp	NEAR $L$14loop
1129$L$14break:
1130	mov	DWORD[48+rdi],14
1131	xor	rax,rax
1132	jmp	NEAR $L$exit
1133
1134$L$badpointer:
1135	mov	rax,-1
1136$L$exit:
1137DB	0xf3,0xc3
1138
1139ALIGN	16
1140global	asm_AES_set_decrypt_key
1141
1142asm_AES_set_decrypt_key:
1143	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1144	mov	QWORD[16+rsp],rsi
1145	mov	rax,rsp
1146$L$SEH_begin_asm_AES_set_decrypt_key:
1147	mov	rdi,rcx
1148	mov	rsi,rdx
1149	mov	rdx,r8
1150
1151
1152	push	rbx
1153	push	rbp
1154	push	r12
1155	push	r13
1156	push	r14
1157	push	r15
1158	push	rdx
1159$L$dec_key_prologue:
1160
1161	call	_x86_64_AES_set_encrypt_key
1162	mov	r8,QWORD[rsp]
1163	cmp	eax,0
1164	jne	NEAR $L$abort
1165
1166	mov	r14d,DWORD[240+r8]
1167	xor	rdi,rdi
1168	lea	rcx,[r14*4+rdi]
1169	mov	rsi,r8
1170	lea	rdi,[rcx*4+r8]
1171ALIGN	4
1172$L$invert:
1173	mov	rax,QWORD[rsi]
1174	mov	rbx,QWORD[8+rsi]
1175	mov	rcx,QWORD[rdi]
1176	mov	rdx,QWORD[8+rdi]
1177	mov	QWORD[rdi],rax
1178	mov	QWORD[8+rdi],rbx
1179	mov	QWORD[rsi],rcx
1180	mov	QWORD[8+rsi],rdx
1181	lea	rsi,[16+rsi]
1182	lea	rdi,[((-16))+rdi]
1183	cmp	rdi,rsi
1184	jne	NEAR $L$invert
1185
1186	lea	rax,[(($L$AES_Te+2048+1024))]
1187
1188	mov	rsi,QWORD[40+rax]
1189	mov	rdi,QWORD[48+rax]
1190	mov	rbp,QWORD[56+rax]
1191
1192	mov	r15,r8
1193	sub	r14d,1
1194ALIGN	4
1195$L$permute:
1196	lea	r15,[16+r15]
1197	mov	rax,QWORD[r15]
1198	mov	rcx,QWORD[8+r15]
1199	mov	r9,rsi
1200	mov	r12,rsi
1201	and	r9,rax
1202	and	r12,rcx
1203	mov	rbx,r9
1204	mov	rdx,r12
1205	shr	r9,7
1206	lea	r8,[rax*1+rax]
1207	shr	r12,7
1208	lea	r11,[rcx*1+rcx]
1209	sub	rbx,r9
1210	sub	rdx,r12
1211	and	r8,rdi
1212	and	r11,rdi
1213	and	rbx,rbp
1214	and	rdx,rbp
1215	xor	r8,rbx
1216	xor	r11,rdx
1217	mov	r10,rsi
1218	mov	r13,rsi
1219
1220	and	r10,r8
1221	and	r13,r11
1222	mov	rbx,r10
1223	mov	rdx,r13
1224	shr	r10,7
1225	lea	r9,[r8*1+r8]
1226	shr	r13,7
1227	lea	r12,[r11*1+r11]
1228	sub	rbx,r10
1229	sub	rdx,r13
1230	and	r9,rdi
1231	and	r12,rdi
1232	and	rbx,rbp
1233	and	rdx,rbp
1234	xor	r9,rbx
1235	xor	r12,rdx
1236	mov	r10,rsi
1237	mov	r13,rsi
1238
1239	and	r10,r9
1240	and	r13,r12
1241	mov	rbx,r10
1242	mov	rdx,r13
1243	shr	r10,7
1244	xor	r8,rax
1245	shr	r13,7
1246	xor	r11,rcx
1247	sub	rbx,r10
1248	sub	rdx,r13
1249	lea	r10,[r9*1+r9]
1250	lea	r13,[r12*1+r12]
1251	xor	r9,rax
1252	xor	r12,rcx
1253	and	r10,rdi
1254	and	r13,rdi
1255	and	rbx,rbp
1256	and	rdx,rbp
1257	xor	r10,rbx
1258	xor	r13,rdx
1259
1260	xor	rax,r10
1261	xor	rcx,r13
1262	xor	r8,r10
1263	xor	r11,r13
1264	mov	rbx,rax
1265	mov	rdx,rcx
1266	xor	r9,r10
1267	shr	rbx,32
1268	xor	r12,r13
1269	shr	rdx,32
1270	xor	r10,r8
1271	rol	eax,8
1272	xor	r13,r11
1273	rol	ecx,8
1274	xor	r10,r9
1275	rol	ebx,8
1276	xor	r13,r12
1277
1278	rol	edx,8
1279	xor	eax,r10d
1280	shr	r10,32
1281	xor	ecx,r13d
1282	shr	r13,32
1283	xor	ebx,r10d
1284	xor	edx,r13d
1285
1286	mov	r10,r8
1287	rol	r8d,24
1288	mov	r13,r11
1289	rol	r11d,24
1290	shr	r10,32
1291	xor	eax,r8d
1292	shr	r13,32
1293	xor	ecx,r11d
1294	rol	r10d,24
1295	mov	r8,r9
1296	rol	r13d,24
1297	mov	r11,r12
1298	shr	r8,32
1299	xor	ebx,r10d
1300	shr	r11,32
1301	xor	edx,r13d
1302
1303
1304	rol	r9d,16
1305
1306	rol	r12d,16
1307
1308	rol	r8d,16
1309
1310	xor	eax,r9d
1311	rol	r11d,16
1312	xor	ecx,r12d
1313
1314	xor	ebx,r8d
1315	xor	edx,r11d
1316	mov	DWORD[r15],eax
1317	mov	DWORD[4+r15],ebx
1318	mov	DWORD[8+r15],ecx
1319	mov	DWORD[12+r15],edx
1320	sub	r14d,1
1321	jnz	NEAR $L$permute
1322
1323	xor	rax,rax
1324$L$abort:
1325	mov	r15,QWORD[8+rsp]
1326	mov	r14,QWORD[16+rsp]
1327	mov	r13,QWORD[24+rsp]
1328	mov	r12,QWORD[32+rsp]
1329	mov	rbp,QWORD[40+rsp]
1330	mov	rbx,QWORD[48+rsp]
1331	add	rsp,56
1332$L$dec_key_epilogue:
1333	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1334	mov	rsi,QWORD[16+rsp]
1335	DB	0F3h,0C3h		;repret
1336$L$SEH_end_asm_AES_set_decrypt_key:
1337ALIGN	16
1338global	asm_AES_cbc_encrypt
1339
1340EXTERN	OPENSSL_ia32cap_P
1341
1342asm_AES_cbc_encrypt:
1343	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1344	mov	QWORD[16+rsp],rsi
1345	mov	rax,rsp
1346$L$SEH_begin_asm_AES_cbc_encrypt:
1347	mov	rdi,rcx
1348	mov	rsi,rdx
1349	mov	rdx,r8
1350	mov	rcx,r9
1351	mov	r8,QWORD[40+rsp]
1352	mov	r9,QWORD[48+rsp]
1353
1354
1355	cmp	rdx,0
1356	je	NEAR $L$cbc_epilogue
1357	pushfq
1358	push	rbx
1359	push	rbp
1360	push	r12
1361	push	r13
1362	push	r14
1363	push	r15
1364$L$cbc_prologue:
1365
1366	cld
1367	mov	r9d,r9d
1368
1369	lea	r14,[$L$AES_Te]
1370	cmp	r9,0
1371	jne	NEAR $L$cbc_picked_te
1372	lea	r14,[$L$AES_Td]
1373$L$cbc_picked_te:
1374
1375	mov	r10d,DWORD[OPENSSL_ia32cap_P]
1376	cmp	rdx,512
1377	jb	NEAR $L$cbc_slow_prologue
1378	test	rdx,15
1379	jnz	NEAR $L$cbc_slow_prologue
1380	bt	r10d,28
1381	jc	NEAR $L$cbc_slow_prologue
1382
1383
1384	lea	r15,[((-88-248))+rsp]
1385	and	r15,-64
1386
1387
1388	mov	r10,r14
1389	lea	r11,[2304+r14]
1390	mov	r12,r15
1391	and	r10,0xFFF
1392	and	r11,0xFFF
1393	and	r12,0xFFF
1394
1395	cmp	r12,r11
1396	jb	NEAR $L$cbc_te_break_out
1397	sub	r12,r11
1398	sub	r15,r12
1399	jmp	NEAR $L$cbc_te_ok
1400$L$cbc_te_break_out:
1401	sub	r12,r10
1402	and	r12,0xFFF
1403	add	r12,320
1404	sub	r15,r12
1405ALIGN	4
1406$L$cbc_te_ok:
1407
1408	xchg	r15,rsp
1409
1410	mov	QWORD[16+rsp],r15
1411$L$cbc_fast_body:
1412	mov	QWORD[24+rsp],rdi
1413	mov	QWORD[32+rsp],rsi
1414	mov	QWORD[40+rsp],rdx
1415	mov	QWORD[48+rsp],rcx
1416	mov	QWORD[56+rsp],r8
1417	mov	DWORD[((80+240))+rsp],0
1418	mov	rbp,r8
1419	mov	rbx,r9
1420	mov	r9,rsi
1421	mov	r8,rdi
1422	mov	r15,rcx
1423
1424	mov	eax,DWORD[240+r15]
1425
1426	mov	r10,r15
1427	sub	r10,r14
1428	and	r10,0xfff
1429	cmp	r10,2304
1430	jb	NEAR $L$cbc_do_ecopy
1431	cmp	r10,4096-248
1432	jb	NEAR $L$cbc_skip_ecopy
1433ALIGN	4
1434$L$cbc_do_ecopy:
1435	mov	rsi,r15
1436	lea	rdi,[80+rsp]
1437	lea	r15,[80+rsp]
1438	mov	ecx,240/8
1439	DD	0x90A548F3
1440	mov	DWORD[rdi],eax
1441$L$cbc_skip_ecopy:
1442	mov	QWORD[rsp],r15
1443
1444	mov	ecx,18
1445ALIGN	4
1446$L$cbc_prefetch_te:
1447	mov	r10,QWORD[r14]
1448	mov	r11,QWORD[32+r14]
1449	mov	r12,QWORD[64+r14]
1450	mov	r13,QWORD[96+r14]
1451	lea	r14,[128+r14]
1452	sub	ecx,1
1453	jnz	NEAR $L$cbc_prefetch_te
1454	lea	r14,[((-2304))+r14]
1455
1456	cmp	rbx,0
1457	je	NEAR $L$FAST_DECRYPT
1458
1459
1460	mov	eax,DWORD[rbp]
1461	mov	ebx,DWORD[4+rbp]
1462	mov	ecx,DWORD[8+rbp]
1463	mov	edx,DWORD[12+rbp]
1464
1465ALIGN	4
1466$L$cbc_fast_enc_loop:
1467	xor	eax,DWORD[r8]
1468	xor	ebx,DWORD[4+r8]
1469	xor	ecx,DWORD[8+r8]
1470	xor	edx,DWORD[12+r8]
1471	mov	r15,QWORD[rsp]
1472	mov	QWORD[24+rsp],r8
1473
1474	call	_x86_64_AES_encrypt
1475
1476	mov	r8,QWORD[24+rsp]
1477	mov	r10,QWORD[40+rsp]
1478	mov	DWORD[r9],eax
1479	mov	DWORD[4+r9],ebx
1480	mov	DWORD[8+r9],ecx
1481	mov	DWORD[12+r9],edx
1482
1483	lea	r8,[16+r8]
1484	lea	r9,[16+r9]
1485	sub	r10,16
1486	test	r10,-16
1487	mov	QWORD[40+rsp],r10
1488	jnz	NEAR $L$cbc_fast_enc_loop
1489	mov	rbp,QWORD[56+rsp]
1490	mov	DWORD[rbp],eax
1491	mov	DWORD[4+rbp],ebx
1492	mov	DWORD[8+rbp],ecx
1493	mov	DWORD[12+rbp],edx
1494
1495	jmp	NEAR $L$cbc_fast_cleanup
1496
1497
1498ALIGN	16
1499$L$FAST_DECRYPT:
1500	cmp	r9,r8
1501	je	NEAR $L$cbc_fast_dec_in_place
1502
1503	mov	QWORD[64+rsp],rbp
1504ALIGN	4
1505$L$cbc_fast_dec_loop:
1506	mov	eax,DWORD[r8]
1507	mov	ebx,DWORD[4+r8]
1508	mov	ecx,DWORD[8+r8]
1509	mov	edx,DWORD[12+r8]
1510	mov	r15,QWORD[rsp]
1511	mov	QWORD[24+rsp],r8
1512
1513	call	_x86_64_AES_decrypt
1514
1515	mov	rbp,QWORD[64+rsp]
1516	mov	r8,QWORD[24+rsp]
1517	mov	r10,QWORD[40+rsp]
1518	xor	eax,DWORD[rbp]
1519	xor	ebx,DWORD[4+rbp]
1520	xor	ecx,DWORD[8+rbp]
1521	xor	edx,DWORD[12+rbp]
1522	mov	rbp,r8
1523
1524	sub	r10,16
1525	mov	QWORD[40+rsp],r10
1526	mov	QWORD[64+rsp],rbp
1527
1528	mov	DWORD[r9],eax
1529	mov	DWORD[4+r9],ebx
1530	mov	DWORD[8+r9],ecx
1531	mov	DWORD[12+r9],edx
1532
1533	lea	r8,[16+r8]
1534	lea	r9,[16+r9]
1535	jnz	NEAR $L$cbc_fast_dec_loop
1536	mov	r12,QWORD[56+rsp]
1537	mov	r10,QWORD[rbp]
1538	mov	r11,QWORD[8+rbp]
1539	mov	QWORD[r12],r10
1540	mov	QWORD[8+r12],r11
1541	jmp	NEAR $L$cbc_fast_cleanup
1542
1543ALIGN	16
1544$L$cbc_fast_dec_in_place:
1545	mov	r10,QWORD[rbp]
1546	mov	r11,QWORD[8+rbp]
1547	mov	QWORD[((0+64))+rsp],r10
1548	mov	QWORD[((8+64))+rsp],r11
1549ALIGN	4
1550$L$cbc_fast_dec_in_place_loop:
1551	mov	eax,DWORD[r8]
1552	mov	ebx,DWORD[4+r8]
1553	mov	ecx,DWORD[8+r8]
1554	mov	edx,DWORD[12+r8]
1555	mov	r15,QWORD[rsp]
1556	mov	QWORD[24+rsp],r8
1557
1558	call	_x86_64_AES_decrypt
1559
1560	mov	r8,QWORD[24+rsp]
1561	mov	r10,QWORD[40+rsp]
1562	xor	eax,DWORD[((0+64))+rsp]
1563	xor	ebx,DWORD[((4+64))+rsp]
1564	xor	ecx,DWORD[((8+64))+rsp]
1565	xor	edx,DWORD[((12+64))+rsp]
1566
1567	mov	r11,QWORD[r8]
1568	mov	r12,QWORD[8+r8]
1569	sub	r10,16
1570	jz	NEAR $L$cbc_fast_dec_in_place_done
1571
1572	mov	QWORD[((0+64))+rsp],r11
1573	mov	QWORD[((8+64))+rsp],r12
1574
1575	mov	DWORD[r9],eax
1576	mov	DWORD[4+r9],ebx
1577	mov	DWORD[8+r9],ecx
1578	mov	DWORD[12+r9],edx
1579
1580	lea	r8,[16+r8]
1581	lea	r9,[16+r9]
1582	mov	QWORD[40+rsp],r10
1583	jmp	NEAR $L$cbc_fast_dec_in_place_loop
1584$L$cbc_fast_dec_in_place_done:
1585	mov	rdi,QWORD[56+rsp]
1586	mov	QWORD[rdi],r11
1587	mov	QWORD[8+rdi],r12
1588
1589	mov	DWORD[r9],eax
1590	mov	DWORD[4+r9],ebx
1591	mov	DWORD[8+r9],ecx
1592	mov	DWORD[12+r9],edx
1593
1594ALIGN	4
1595$L$cbc_fast_cleanup:
1596	cmp	DWORD[((80+240))+rsp],0
1597	lea	rdi,[80+rsp]
1598	je	NEAR $L$cbc_exit
1599	mov	ecx,240/8
1600	xor	rax,rax
1601	DD	0x90AB48F3
1602
1603	jmp	NEAR $L$cbc_exit
1604
1605
1606ALIGN	16
1607$L$cbc_slow_prologue:
1608
1609	lea	rbp,[((-88))+rsp]
1610	and	rbp,-64
1611
1612	lea	r10,[((-88-63))+rcx]
1613	sub	r10,rbp
1614	neg	r10
1615	and	r10,0x3c0
1616	sub	rbp,r10
1617
1618	xchg	rbp,rsp
1619
1620	mov	QWORD[16+rsp],rbp
1621$L$cbc_slow_body:
1622
1623
1624
1625
1626	mov	QWORD[56+rsp],r8
1627	mov	rbp,r8
1628	mov	rbx,r9
1629	mov	r9,rsi
1630	mov	r8,rdi
1631	mov	r15,rcx
1632	mov	r10,rdx
1633
1634	mov	eax,DWORD[240+r15]
1635	mov	QWORD[rsp],r15
1636	shl	eax,4
1637	lea	rax,[rax*1+r15]
1638	mov	QWORD[8+rsp],rax
1639
1640
1641	lea	r14,[2048+r14]
1642	lea	rax,[((768-8))+rsp]
1643	sub	rax,r14
1644	and	rax,0x300
1645	lea	r14,[rax*1+r14]
1646
1647	cmp	rbx,0
1648	je	NEAR $L$SLOW_DECRYPT
1649
1650
1651	test	r10,-16
1652	mov	eax,DWORD[rbp]
1653	mov	ebx,DWORD[4+rbp]
1654	mov	ecx,DWORD[8+rbp]
1655	mov	edx,DWORD[12+rbp]
1656	jz	NEAR $L$cbc_slow_enc_tail
1657
1658ALIGN	4
1659$L$cbc_slow_enc_loop:
1660	xor	eax,DWORD[r8]
1661	xor	ebx,DWORD[4+r8]
1662	xor	ecx,DWORD[8+r8]
1663	xor	edx,DWORD[12+r8]
1664	mov	r15,QWORD[rsp]
1665	mov	QWORD[24+rsp],r8
1666	mov	QWORD[32+rsp],r9
1667	mov	QWORD[40+rsp],r10
1668
1669	call	_x86_64_AES_encrypt_compact
1670
1671	mov	r8,QWORD[24+rsp]
1672	mov	r9,QWORD[32+rsp]
1673	mov	r10,QWORD[40+rsp]
1674	mov	DWORD[r9],eax
1675	mov	DWORD[4+r9],ebx
1676	mov	DWORD[8+r9],ecx
1677	mov	DWORD[12+r9],edx
1678
1679	lea	r8,[16+r8]
1680	lea	r9,[16+r9]
1681	sub	r10,16
1682	test	r10,-16
1683	jnz	NEAR $L$cbc_slow_enc_loop
1684	test	r10,15
1685	jnz	NEAR $L$cbc_slow_enc_tail
1686	mov	rbp,QWORD[56+rsp]
1687	mov	DWORD[rbp],eax
1688	mov	DWORD[4+rbp],ebx
1689	mov	DWORD[8+rbp],ecx
1690	mov	DWORD[12+rbp],edx
1691
1692	jmp	NEAR $L$cbc_exit
1693
1694ALIGN	4
1695$L$cbc_slow_enc_tail:
1696	mov	r11,rax
1697	mov	r12,rcx
1698	mov	rcx,r10
1699	mov	rsi,r8
1700	mov	rdi,r9
1701	DD	0x9066A4F3
1702	mov	rcx,16
1703	sub	rcx,r10
1704	xor	rax,rax
1705	DD	0x9066AAF3
1706	mov	r8,r9
1707	mov	r10,16
1708	mov	rax,r11
1709	mov	rcx,r12
1710	jmp	NEAR $L$cbc_slow_enc_loop
1711
1712ALIGN	16
1713$L$SLOW_DECRYPT:
1714	shr	rax,3
1715	add	r14,rax
1716
1717	mov	r11,QWORD[rbp]
1718	mov	r12,QWORD[8+rbp]
1719	mov	QWORD[((0+64))+rsp],r11
1720	mov	QWORD[((8+64))+rsp],r12
1721
1722ALIGN	4
1723$L$cbc_slow_dec_loop:
1724	mov	eax,DWORD[r8]
1725	mov	ebx,DWORD[4+r8]
1726	mov	ecx,DWORD[8+r8]
1727	mov	edx,DWORD[12+r8]
1728	mov	r15,QWORD[rsp]
1729	mov	QWORD[24+rsp],r8
1730	mov	QWORD[32+rsp],r9
1731	mov	QWORD[40+rsp],r10
1732
1733	call	_x86_64_AES_decrypt_compact
1734
1735	mov	r8,QWORD[24+rsp]
1736	mov	r9,QWORD[32+rsp]
1737	mov	r10,QWORD[40+rsp]
1738	xor	eax,DWORD[((0+64))+rsp]
1739	xor	ebx,DWORD[((4+64))+rsp]
1740	xor	ecx,DWORD[((8+64))+rsp]
1741	xor	edx,DWORD[((12+64))+rsp]
1742
1743	mov	r11,QWORD[r8]
1744	mov	r12,QWORD[8+r8]
1745	sub	r10,16
1746	jc	NEAR $L$cbc_slow_dec_partial
1747	jz	NEAR $L$cbc_slow_dec_done
1748
1749	mov	QWORD[((0+64))+rsp],r11
1750	mov	QWORD[((8+64))+rsp],r12
1751
1752	mov	DWORD[r9],eax
1753	mov	DWORD[4+r9],ebx
1754	mov	DWORD[8+r9],ecx
1755	mov	DWORD[12+r9],edx
1756
1757	lea	r8,[16+r8]
1758	lea	r9,[16+r9]
1759	jmp	NEAR $L$cbc_slow_dec_loop
1760$L$cbc_slow_dec_done:
1761	mov	rdi,QWORD[56+rsp]
1762	mov	QWORD[rdi],r11
1763	mov	QWORD[8+rdi],r12
1764
1765	mov	DWORD[r9],eax
1766	mov	DWORD[4+r9],ebx
1767	mov	DWORD[8+r9],ecx
1768	mov	DWORD[12+r9],edx
1769
1770	jmp	NEAR $L$cbc_exit
1771
1772ALIGN	4
1773$L$cbc_slow_dec_partial:
1774	mov	rdi,QWORD[56+rsp]
1775	mov	QWORD[rdi],r11
1776	mov	QWORD[8+rdi],r12
1777
1778	mov	DWORD[((0+64))+rsp],eax
1779	mov	DWORD[((4+64))+rsp],ebx
1780	mov	DWORD[((8+64))+rsp],ecx
1781	mov	DWORD[((12+64))+rsp],edx
1782
1783	mov	rdi,r9
1784	lea	rsi,[64+rsp]
1785	lea	rcx,[16+r10]
1786	DD	0x9066A4F3
1787	jmp	NEAR $L$cbc_exit
1788
1789ALIGN	16
1790$L$cbc_exit:
1791	mov	rsi,QWORD[16+rsp]
1792	mov	r15,QWORD[rsi]
1793	mov	r14,QWORD[8+rsi]
1794	mov	r13,QWORD[16+rsi]
1795	mov	r12,QWORD[24+rsi]
1796	mov	rbp,QWORD[32+rsi]
1797	mov	rbx,QWORD[40+rsi]
1798	lea	rsp,[48+rsi]
1799$L$cbc_popfq:
1800	popfq
1801$L$cbc_epilogue:
1802	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1803	mov	rsi,QWORD[16+rsp]
1804	DB	0F3h,0C3h		;repret
1805$L$SEH_end_asm_AES_cbc_encrypt:
1806ALIGN	64
1807$L$AES_Te:
1808	DD	0xa56363c6,0xa56363c6
1809	DD	0x847c7cf8,0x847c7cf8
1810	DD	0x997777ee,0x997777ee
1811	DD	0x8d7b7bf6,0x8d7b7bf6
1812	DD	0x0df2f2ff,0x0df2f2ff
1813	DD	0xbd6b6bd6,0xbd6b6bd6
1814	DD	0xb16f6fde,0xb16f6fde
1815	DD	0x54c5c591,0x54c5c591
1816	DD	0x50303060,0x50303060
1817	DD	0x03010102,0x03010102
1818	DD	0xa96767ce,0xa96767ce
1819	DD	0x7d2b2b56,0x7d2b2b56
1820	DD	0x19fefee7,0x19fefee7
1821	DD	0x62d7d7b5,0x62d7d7b5
1822	DD	0xe6abab4d,0xe6abab4d
1823	DD	0x9a7676ec,0x9a7676ec
1824	DD	0x45caca8f,0x45caca8f
1825	DD	0x9d82821f,0x9d82821f
1826	DD	0x40c9c989,0x40c9c989
1827	DD	0x877d7dfa,0x877d7dfa
1828	DD	0x15fafaef,0x15fafaef
1829	DD	0xeb5959b2,0xeb5959b2
1830	DD	0xc947478e,0xc947478e
1831	DD	0x0bf0f0fb,0x0bf0f0fb
1832	DD	0xecadad41,0xecadad41
1833	DD	0x67d4d4b3,0x67d4d4b3
1834	DD	0xfda2a25f,0xfda2a25f
1835	DD	0xeaafaf45,0xeaafaf45
1836	DD	0xbf9c9c23,0xbf9c9c23
1837	DD	0xf7a4a453,0xf7a4a453
1838	DD	0x967272e4,0x967272e4
1839	DD	0x5bc0c09b,0x5bc0c09b
1840	DD	0xc2b7b775,0xc2b7b775
1841	DD	0x1cfdfde1,0x1cfdfde1
1842	DD	0xae93933d,0xae93933d
1843	DD	0x6a26264c,0x6a26264c
1844	DD	0x5a36366c,0x5a36366c
1845	DD	0x413f3f7e,0x413f3f7e
1846	DD	0x02f7f7f5,0x02f7f7f5
1847	DD	0x4fcccc83,0x4fcccc83
1848	DD	0x5c343468,0x5c343468
1849	DD	0xf4a5a551,0xf4a5a551
1850	DD	0x34e5e5d1,0x34e5e5d1
1851	DD	0x08f1f1f9,0x08f1f1f9
1852	DD	0x937171e2,0x937171e2
1853	DD	0x73d8d8ab,0x73d8d8ab
1854	DD	0x53313162,0x53313162
1855	DD	0x3f15152a,0x3f15152a
1856	DD	0x0c040408,0x0c040408
1857	DD	0x52c7c795,0x52c7c795
1858	DD	0x65232346,0x65232346
1859	DD	0x5ec3c39d,0x5ec3c39d
1860	DD	0x28181830,0x28181830
1861	DD	0xa1969637,0xa1969637
1862	DD	0x0f05050a,0x0f05050a
1863	DD	0xb59a9a2f,0xb59a9a2f
1864	DD	0x0907070e,0x0907070e
1865	DD	0x36121224,0x36121224
1866	DD	0x9b80801b,0x9b80801b
1867	DD	0x3de2e2df,0x3de2e2df
1868	DD	0x26ebebcd,0x26ebebcd
1869	DD	0x6927274e,0x6927274e
1870	DD	0xcdb2b27f,0xcdb2b27f
1871	DD	0x9f7575ea,0x9f7575ea
1872	DD	0x1b090912,0x1b090912
1873	DD	0x9e83831d,0x9e83831d
1874	DD	0x742c2c58,0x742c2c58
1875	DD	0x2e1a1a34,0x2e1a1a34
1876	DD	0x2d1b1b36,0x2d1b1b36
1877	DD	0xb26e6edc,0xb26e6edc
1878	DD	0xee5a5ab4,0xee5a5ab4
1879	DD	0xfba0a05b,0xfba0a05b
1880	DD	0xf65252a4,0xf65252a4
1881	DD	0x4d3b3b76,0x4d3b3b76
1882	DD	0x61d6d6b7,0x61d6d6b7
1883	DD	0xceb3b37d,0xceb3b37d
1884	DD	0x7b292952,0x7b292952
1885	DD	0x3ee3e3dd,0x3ee3e3dd
1886	DD	0x712f2f5e,0x712f2f5e
1887	DD	0x97848413,0x97848413
1888	DD	0xf55353a6,0xf55353a6
1889	DD	0x68d1d1b9,0x68d1d1b9
1890	DD	0x00000000,0x00000000
1891	DD	0x2cededc1,0x2cededc1
1892	DD	0x60202040,0x60202040
1893	DD	0x1ffcfce3,0x1ffcfce3
1894	DD	0xc8b1b179,0xc8b1b179
1895	DD	0xed5b5bb6,0xed5b5bb6
1896	DD	0xbe6a6ad4,0xbe6a6ad4
1897	DD	0x46cbcb8d,0x46cbcb8d
1898	DD	0xd9bebe67,0xd9bebe67
1899	DD	0x4b393972,0x4b393972
1900	DD	0xde4a4a94,0xde4a4a94
1901	DD	0xd44c4c98,0xd44c4c98
1902	DD	0xe85858b0,0xe85858b0
1903	DD	0x4acfcf85,0x4acfcf85
1904	DD	0x6bd0d0bb,0x6bd0d0bb
1905	DD	0x2aefefc5,0x2aefefc5
1906	DD	0xe5aaaa4f,0xe5aaaa4f
1907	DD	0x16fbfbed,0x16fbfbed
1908	DD	0xc5434386,0xc5434386
1909	DD	0xd74d4d9a,0xd74d4d9a
1910	DD	0x55333366,0x55333366
1911	DD	0x94858511,0x94858511
1912	DD	0xcf45458a,0xcf45458a
1913	DD	0x10f9f9e9,0x10f9f9e9
1914	DD	0x06020204,0x06020204
1915	DD	0x817f7ffe,0x817f7ffe
1916	DD	0xf05050a0,0xf05050a0
1917	DD	0x443c3c78,0x443c3c78
1918	DD	0xba9f9f25,0xba9f9f25
1919	DD	0xe3a8a84b,0xe3a8a84b
1920	DD	0xf35151a2,0xf35151a2
1921	DD	0xfea3a35d,0xfea3a35d
1922	DD	0xc0404080,0xc0404080
1923	DD	0x8a8f8f05,0x8a8f8f05
1924	DD	0xad92923f,0xad92923f
1925	DD	0xbc9d9d21,0xbc9d9d21
1926	DD	0x48383870,0x48383870
1927	DD	0x04f5f5f1,0x04f5f5f1
1928	DD	0xdfbcbc63,0xdfbcbc63
1929	DD	0xc1b6b677,0xc1b6b677
1930	DD	0x75dadaaf,0x75dadaaf
1931	DD	0x63212142,0x63212142
1932	DD	0x30101020,0x30101020
1933	DD	0x1affffe5,0x1affffe5
1934	DD	0x0ef3f3fd,0x0ef3f3fd
1935	DD	0x6dd2d2bf,0x6dd2d2bf
1936	DD	0x4ccdcd81,0x4ccdcd81
1937	DD	0x140c0c18,0x140c0c18
1938	DD	0x35131326,0x35131326
1939	DD	0x2fececc3,0x2fececc3
1940	DD	0xe15f5fbe,0xe15f5fbe
1941	DD	0xa2979735,0xa2979735
1942	DD	0xcc444488,0xcc444488
1943	DD	0x3917172e,0x3917172e
1944	DD	0x57c4c493,0x57c4c493
1945	DD	0xf2a7a755,0xf2a7a755
1946	DD	0x827e7efc,0x827e7efc
1947	DD	0x473d3d7a,0x473d3d7a
1948	DD	0xac6464c8,0xac6464c8
1949	DD	0xe75d5dba,0xe75d5dba
1950	DD	0x2b191932,0x2b191932
1951	DD	0x957373e6,0x957373e6
1952	DD	0xa06060c0,0xa06060c0
1953	DD	0x98818119,0x98818119
1954	DD	0xd14f4f9e,0xd14f4f9e
1955	DD	0x7fdcdca3,0x7fdcdca3
1956	DD	0x66222244,0x66222244
1957	DD	0x7e2a2a54,0x7e2a2a54
1958	DD	0xab90903b,0xab90903b
1959	DD	0x8388880b,0x8388880b
1960	DD	0xca46468c,0xca46468c
1961	DD	0x29eeeec7,0x29eeeec7
1962	DD	0xd3b8b86b,0xd3b8b86b
1963	DD	0x3c141428,0x3c141428
1964	DD	0x79dedea7,0x79dedea7
1965	DD	0xe25e5ebc,0xe25e5ebc
1966	DD	0x1d0b0b16,0x1d0b0b16
1967	DD	0x76dbdbad,0x76dbdbad
1968	DD	0x3be0e0db,0x3be0e0db
1969	DD	0x56323264,0x56323264
1970	DD	0x4e3a3a74,0x4e3a3a74
1971	DD	0x1e0a0a14,0x1e0a0a14
1972	DD	0xdb494992,0xdb494992
1973	DD	0x0a06060c,0x0a06060c
1974	DD	0x6c242448,0x6c242448
1975	DD	0xe45c5cb8,0xe45c5cb8
1976	DD	0x5dc2c29f,0x5dc2c29f
1977	DD	0x6ed3d3bd,0x6ed3d3bd
1978	DD	0xefacac43,0xefacac43
1979	DD	0xa66262c4,0xa66262c4
1980	DD	0xa8919139,0xa8919139
1981	DD	0xa4959531,0xa4959531
1982	DD	0x37e4e4d3,0x37e4e4d3
1983	DD	0x8b7979f2,0x8b7979f2
1984	DD	0x32e7e7d5,0x32e7e7d5
1985	DD	0x43c8c88b,0x43c8c88b
1986	DD	0x5937376e,0x5937376e
1987	DD	0xb76d6dda,0xb76d6dda
1988	DD	0x8c8d8d01,0x8c8d8d01
1989	DD	0x64d5d5b1,0x64d5d5b1
1990	DD	0xd24e4e9c,0xd24e4e9c
1991	DD	0xe0a9a949,0xe0a9a949
1992	DD	0xb46c6cd8,0xb46c6cd8
1993	DD	0xfa5656ac,0xfa5656ac
1994	DD	0x07f4f4f3,0x07f4f4f3
1995	DD	0x25eaeacf,0x25eaeacf
1996	DD	0xaf6565ca,0xaf6565ca
1997	DD	0x8e7a7af4,0x8e7a7af4
1998	DD	0xe9aeae47,0xe9aeae47
1999	DD	0x18080810,0x18080810
2000	DD	0xd5baba6f,0xd5baba6f
2001	DD	0x887878f0,0x887878f0
2002	DD	0x6f25254a,0x6f25254a
2003	DD	0x722e2e5c,0x722e2e5c
2004	DD	0x241c1c38,0x241c1c38
2005	DD	0xf1a6a657,0xf1a6a657
2006	DD	0xc7b4b473,0xc7b4b473
2007	DD	0x51c6c697,0x51c6c697
2008	DD	0x23e8e8cb,0x23e8e8cb
2009	DD	0x7cdddda1,0x7cdddda1
2010	DD	0x9c7474e8,0x9c7474e8
2011	DD	0x211f1f3e,0x211f1f3e
2012	DD	0xdd4b4b96,0xdd4b4b96
2013	DD	0xdcbdbd61,0xdcbdbd61
2014	DD	0x868b8b0d,0x868b8b0d
2015	DD	0x858a8a0f,0x858a8a0f
2016	DD	0x907070e0,0x907070e0
2017	DD	0x423e3e7c,0x423e3e7c
2018	DD	0xc4b5b571,0xc4b5b571
2019	DD	0xaa6666cc,0xaa6666cc
2020	DD	0xd8484890,0xd8484890
2021	DD	0x05030306,0x05030306
2022	DD	0x01f6f6f7,0x01f6f6f7
2023	DD	0x120e0e1c,0x120e0e1c
2024	DD	0xa36161c2,0xa36161c2
2025	DD	0x5f35356a,0x5f35356a
2026	DD	0xf95757ae,0xf95757ae
2027	DD	0xd0b9b969,0xd0b9b969
2028	DD	0x91868617,0x91868617
2029	DD	0x58c1c199,0x58c1c199
2030	DD	0x271d1d3a,0x271d1d3a
2031	DD	0xb99e9e27,0xb99e9e27
2032	DD	0x38e1e1d9,0x38e1e1d9
2033	DD	0x13f8f8eb,0x13f8f8eb
2034	DD	0xb398982b,0xb398982b
2035	DD	0x33111122,0x33111122
2036	DD	0xbb6969d2,0xbb6969d2
2037	DD	0x70d9d9a9,0x70d9d9a9
2038	DD	0x898e8e07,0x898e8e07
2039	DD	0xa7949433,0xa7949433
2040	DD	0xb69b9b2d,0xb69b9b2d
2041	DD	0x221e1e3c,0x221e1e3c
2042	DD	0x92878715,0x92878715
2043	DD	0x20e9e9c9,0x20e9e9c9
2044	DD	0x49cece87,0x49cece87
2045	DD	0xff5555aa,0xff5555aa
2046	DD	0x78282850,0x78282850
2047	DD	0x7adfdfa5,0x7adfdfa5
2048	DD	0x8f8c8c03,0x8f8c8c03
2049	DD	0xf8a1a159,0xf8a1a159
2050	DD	0x80898909,0x80898909
2051	DD	0x170d0d1a,0x170d0d1a
2052	DD	0xdabfbf65,0xdabfbf65
2053	DD	0x31e6e6d7,0x31e6e6d7
2054	DD	0xc6424284,0xc6424284
2055	DD	0xb86868d0,0xb86868d0
2056	DD	0xc3414182,0xc3414182
2057	DD	0xb0999929,0xb0999929
2058	DD	0x772d2d5a,0x772d2d5a
2059	DD	0x110f0f1e,0x110f0f1e
2060	DD	0xcbb0b07b,0xcbb0b07b
2061	DD	0xfc5454a8,0xfc5454a8
2062	DD	0xd6bbbb6d,0xd6bbbb6d
2063	DD	0x3a16162c,0x3a16162c
2064DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2065DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2066DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2067DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2068DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2069DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2070DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2071DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2072DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2073DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2074DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2075DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2076DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2077DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2078DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2079DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2080DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2081DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2082DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2083DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2084DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2085DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2086DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2087DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2088DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2089DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2090DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2091DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2092DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2093DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2094DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2095DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2096DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2097DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2098DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2099DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2100DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2101DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2102DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2103DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2104DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2105DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2106DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2107DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2108DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2109DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2110DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2111DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2112DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2113DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2114DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2115DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2116DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2117DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2118DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2119DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2120DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2121DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2122DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2123DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2124DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2125DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2126DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2127DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2128DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2129DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2130DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2131DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2132DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2133DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2134DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2135DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2136DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2137DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2138DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2139DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2140DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2141DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2142DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2143DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2144DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2145DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2146DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2147DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2148DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2149DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2150DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2151DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2152DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2153DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2154DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2155DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2156DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2157DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2158DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2159DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2160DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2161DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2162DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2163DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2164DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2165DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2166DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2167DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2168DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2169DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2170DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2171DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2172DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2173DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2174DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2175DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2176DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2177DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2178DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2179DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2180DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2181DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2182DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2183DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2184DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2185DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2186DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2187DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2188DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2189DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2190DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2191DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2192	DD	0x00000001,0x00000002,0x00000004,0x00000008
2193	DD	0x00000010,0x00000020,0x00000040,0x00000080
2194	DD	0x0000001b,0x00000036,0x80808080,0x80808080
2195	DD	0xfefefefe,0xfefefefe,0x1b1b1b1b,0x1b1b1b1b
2196ALIGN	64
2197$L$AES_Td:
2198	DD	0x50a7f451,0x50a7f451
2199	DD	0x5365417e,0x5365417e
2200	DD	0xc3a4171a,0xc3a4171a
2201	DD	0x965e273a,0x965e273a
2202	DD	0xcb6bab3b,0xcb6bab3b
2203	DD	0xf1459d1f,0xf1459d1f
2204	DD	0xab58faac,0xab58faac
2205	DD	0x9303e34b,0x9303e34b
2206	DD	0x55fa3020,0x55fa3020
2207	DD	0xf66d76ad,0xf66d76ad
2208	DD	0x9176cc88,0x9176cc88
2209	DD	0x254c02f5,0x254c02f5
2210	DD	0xfcd7e54f,0xfcd7e54f
2211	DD	0xd7cb2ac5,0xd7cb2ac5
2212	DD	0x80443526,0x80443526
2213	DD	0x8fa362b5,0x8fa362b5
2214	DD	0x495ab1de,0x495ab1de
2215	DD	0x671bba25,0x671bba25
2216	DD	0x980eea45,0x980eea45
2217	DD	0xe1c0fe5d,0xe1c0fe5d
2218	DD	0x02752fc3,0x02752fc3
2219	DD	0x12f04c81,0x12f04c81
2220	DD	0xa397468d,0xa397468d
2221	DD	0xc6f9d36b,0xc6f9d36b
2222	DD	0xe75f8f03,0xe75f8f03
2223	DD	0x959c9215,0x959c9215
2224	DD	0xeb7a6dbf,0xeb7a6dbf
2225	DD	0xda595295,0xda595295
2226	DD	0x2d83bed4,0x2d83bed4
2227	DD	0xd3217458,0xd3217458
2228	DD	0x2969e049,0x2969e049
2229	DD	0x44c8c98e,0x44c8c98e
2230	DD	0x6a89c275,0x6a89c275
2231	DD	0x78798ef4,0x78798ef4
2232	DD	0x6b3e5899,0x6b3e5899
2233	DD	0xdd71b927,0xdd71b927
2234	DD	0xb64fe1be,0xb64fe1be
2235	DD	0x17ad88f0,0x17ad88f0
2236	DD	0x66ac20c9,0x66ac20c9
2237	DD	0xb43ace7d,0xb43ace7d
2238	DD	0x184adf63,0x184adf63
2239	DD	0x82311ae5,0x82311ae5
2240	DD	0x60335197,0x60335197
2241	DD	0x457f5362,0x457f5362
2242	DD	0xe07764b1,0xe07764b1
2243	DD	0x84ae6bbb,0x84ae6bbb
2244	DD	0x1ca081fe,0x1ca081fe
2245	DD	0x942b08f9,0x942b08f9
2246	DD	0x58684870,0x58684870
2247	DD	0x19fd458f,0x19fd458f
2248	DD	0x876cde94,0x876cde94
2249	DD	0xb7f87b52,0xb7f87b52
2250	DD	0x23d373ab,0x23d373ab
2251	DD	0xe2024b72,0xe2024b72
2252	DD	0x578f1fe3,0x578f1fe3
2253	DD	0x2aab5566,0x2aab5566
2254	DD	0x0728ebb2,0x0728ebb2
2255	DD	0x03c2b52f,0x03c2b52f
2256	DD	0x9a7bc586,0x9a7bc586
2257	DD	0xa50837d3,0xa50837d3
2258	DD	0xf2872830,0xf2872830
2259	DD	0xb2a5bf23,0xb2a5bf23
2260	DD	0xba6a0302,0xba6a0302
2261	DD	0x5c8216ed,0x5c8216ed
2262	DD	0x2b1ccf8a,0x2b1ccf8a
2263	DD	0x92b479a7,0x92b479a7
2264	DD	0xf0f207f3,0xf0f207f3
2265	DD	0xa1e2694e,0xa1e2694e
2266	DD	0xcdf4da65,0xcdf4da65
2267	DD	0xd5be0506,0xd5be0506
2268	DD	0x1f6234d1,0x1f6234d1
2269	DD	0x8afea6c4,0x8afea6c4
2270	DD	0x9d532e34,0x9d532e34
2271	DD	0xa055f3a2,0xa055f3a2
2272	DD	0x32e18a05,0x32e18a05
2273	DD	0x75ebf6a4,0x75ebf6a4
2274	DD	0x39ec830b,0x39ec830b
2275	DD	0xaaef6040,0xaaef6040
2276	DD	0x069f715e,0x069f715e
2277	DD	0x51106ebd,0x51106ebd
2278	DD	0xf98a213e,0xf98a213e
2279	DD	0x3d06dd96,0x3d06dd96
2280	DD	0xae053edd,0xae053edd
2281	DD	0x46bde64d,0x46bde64d
2282	DD	0xb58d5491,0xb58d5491
2283	DD	0x055dc471,0x055dc471
2284	DD	0x6fd40604,0x6fd40604
2285	DD	0xff155060,0xff155060
2286	DD	0x24fb9819,0x24fb9819
2287	DD	0x97e9bdd6,0x97e9bdd6
2288	DD	0xcc434089,0xcc434089
2289	DD	0x779ed967,0x779ed967
2290	DD	0xbd42e8b0,0xbd42e8b0
2291	DD	0x888b8907,0x888b8907
2292	DD	0x385b19e7,0x385b19e7
2293	DD	0xdbeec879,0xdbeec879
2294	DD	0x470a7ca1,0x470a7ca1
2295	DD	0xe90f427c,0xe90f427c
2296	DD	0xc91e84f8,0xc91e84f8
2297	DD	0x00000000,0x00000000
2298	DD	0x83868009,0x83868009
2299	DD	0x48ed2b32,0x48ed2b32
2300	DD	0xac70111e,0xac70111e
2301	DD	0x4e725a6c,0x4e725a6c
2302	DD	0xfbff0efd,0xfbff0efd
2303	DD	0x5638850f,0x5638850f
2304	DD	0x1ed5ae3d,0x1ed5ae3d
2305	DD	0x27392d36,0x27392d36
2306	DD	0x64d90f0a,0x64d90f0a
2307	DD	0x21a65c68,0x21a65c68
2308	DD	0xd1545b9b,0xd1545b9b
2309	DD	0x3a2e3624,0x3a2e3624
2310	DD	0xb1670a0c,0xb1670a0c
2311	DD	0x0fe75793,0x0fe75793
2312	DD	0xd296eeb4,0xd296eeb4
2313	DD	0x9e919b1b,0x9e919b1b
2314	DD	0x4fc5c080,0x4fc5c080
2315	DD	0xa220dc61,0xa220dc61
2316	DD	0x694b775a,0x694b775a
2317	DD	0x161a121c,0x161a121c
2318	DD	0x0aba93e2,0x0aba93e2
2319	DD	0xe52aa0c0,0xe52aa0c0
2320	DD	0x43e0223c,0x43e0223c
2321	DD	0x1d171b12,0x1d171b12
2322	DD	0x0b0d090e,0x0b0d090e
2323	DD	0xadc78bf2,0xadc78bf2
2324	DD	0xb9a8b62d,0xb9a8b62d
2325	DD	0xc8a91e14,0xc8a91e14
2326	DD	0x8519f157,0x8519f157
2327	DD	0x4c0775af,0x4c0775af
2328	DD	0xbbdd99ee,0xbbdd99ee
2329	DD	0xfd607fa3,0xfd607fa3
2330	DD	0x9f2601f7,0x9f2601f7
2331	DD	0xbcf5725c,0xbcf5725c
2332	DD	0xc53b6644,0xc53b6644
2333	DD	0x347efb5b,0x347efb5b
2334	DD	0x7629438b,0x7629438b
2335	DD	0xdcc623cb,0xdcc623cb
2336	DD	0x68fcedb6,0x68fcedb6
2337	DD	0x63f1e4b8,0x63f1e4b8
2338	DD	0xcadc31d7,0xcadc31d7
2339	DD	0x10856342,0x10856342
2340	DD	0x40229713,0x40229713
2341	DD	0x2011c684,0x2011c684
2342	DD	0x7d244a85,0x7d244a85
2343	DD	0xf83dbbd2,0xf83dbbd2
2344	DD	0x1132f9ae,0x1132f9ae
2345	DD	0x6da129c7,0x6da129c7
2346	DD	0x4b2f9e1d,0x4b2f9e1d
2347	DD	0xf330b2dc,0xf330b2dc
2348	DD	0xec52860d,0xec52860d
2349	DD	0xd0e3c177,0xd0e3c177
2350	DD	0x6c16b32b,0x6c16b32b
2351	DD	0x99b970a9,0x99b970a9
2352	DD	0xfa489411,0xfa489411
2353	DD	0x2264e947,0x2264e947
2354	DD	0xc48cfca8,0xc48cfca8
2355	DD	0x1a3ff0a0,0x1a3ff0a0
2356	DD	0xd82c7d56,0xd82c7d56
2357	DD	0xef903322,0xef903322
2358	DD	0xc74e4987,0xc74e4987
2359	DD	0xc1d138d9,0xc1d138d9
2360	DD	0xfea2ca8c,0xfea2ca8c
2361	DD	0x360bd498,0x360bd498
2362	DD	0xcf81f5a6,0xcf81f5a6
2363	DD	0x28de7aa5,0x28de7aa5
2364	DD	0x268eb7da,0x268eb7da
2365	DD	0xa4bfad3f,0xa4bfad3f
2366	DD	0xe49d3a2c,0xe49d3a2c
2367	DD	0x0d927850,0x0d927850
2368	DD	0x9bcc5f6a,0x9bcc5f6a
2369	DD	0x62467e54,0x62467e54
2370	DD	0xc2138df6,0xc2138df6
2371	DD	0xe8b8d890,0xe8b8d890
2372	DD	0x5ef7392e,0x5ef7392e
2373	DD	0xf5afc382,0xf5afc382
2374	DD	0xbe805d9f,0xbe805d9f
2375	DD	0x7c93d069,0x7c93d069
2376	DD	0xa92dd56f,0xa92dd56f
2377	DD	0xb31225cf,0xb31225cf
2378	DD	0x3b99acc8,0x3b99acc8
2379	DD	0xa77d1810,0xa77d1810
2380	DD	0x6e639ce8,0x6e639ce8
2381	DD	0x7bbb3bdb,0x7bbb3bdb
2382	DD	0x097826cd,0x097826cd
2383	DD	0xf418596e,0xf418596e
2384	DD	0x01b79aec,0x01b79aec
2385	DD	0xa89a4f83,0xa89a4f83
2386	DD	0x656e95e6,0x656e95e6
2387	DD	0x7ee6ffaa,0x7ee6ffaa
2388	DD	0x08cfbc21,0x08cfbc21
2389	DD	0xe6e815ef,0xe6e815ef
2390	DD	0xd99be7ba,0xd99be7ba
2391	DD	0xce366f4a,0xce366f4a
2392	DD	0xd4099fea,0xd4099fea
2393	DD	0xd67cb029,0xd67cb029
2394	DD	0xafb2a431,0xafb2a431
2395	DD	0x31233f2a,0x31233f2a
2396	DD	0x3094a5c6,0x3094a5c6
2397	DD	0xc066a235,0xc066a235
2398	DD	0x37bc4e74,0x37bc4e74
2399	DD	0xa6ca82fc,0xa6ca82fc
2400	DD	0xb0d090e0,0xb0d090e0
2401	DD	0x15d8a733,0x15d8a733
2402	DD	0x4a9804f1,0x4a9804f1
2403	DD	0xf7daec41,0xf7daec41
2404	DD	0x0e50cd7f,0x0e50cd7f
2405	DD	0x2ff69117,0x2ff69117
2406	DD	0x8dd64d76,0x8dd64d76
2407	DD	0x4db0ef43,0x4db0ef43
2408	DD	0x544daacc,0x544daacc
2409	DD	0xdf0496e4,0xdf0496e4
2410	DD	0xe3b5d19e,0xe3b5d19e
2411	DD	0x1b886a4c,0x1b886a4c
2412	DD	0xb81f2cc1,0xb81f2cc1
2413	DD	0x7f516546,0x7f516546
2414	DD	0x04ea5e9d,0x04ea5e9d
2415	DD	0x5d358c01,0x5d358c01
2416	DD	0x737487fa,0x737487fa
2417	DD	0x2e410bfb,0x2e410bfb
2418	DD	0x5a1d67b3,0x5a1d67b3
2419	DD	0x52d2db92,0x52d2db92
2420	DD	0x335610e9,0x335610e9
2421	DD	0x1347d66d,0x1347d66d
2422	DD	0x8c61d79a,0x8c61d79a
2423	DD	0x7a0ca137,0x7a0ca137
2424	DD	0x8e14f859,0x8e14f859
2425	DD	0x893c13eb,0x893c13eb
2426	DD	0xee27a9ce,0xee27a9ce
2427	DD	0x35c961b7,0x35c961b7
2428	DD	0xede51ce1,0xede51ce1
2429	DD	0x3cb1477a,0x3cb1477a
2430	DD	0x59dfd29c,0x59dfd29c
2431	DD	0x3f73f255,0x3f73f255
2432	DD	0x79ce1418,0x79ce1418
2433	DD	0xbf37c773,0xbf37c773
2434	DD	0xeacdf753,0xeacdf753
2435	DD	0x5baafd5f,0x5baafd5f
2436	DD	0x146f3ddf,0x146f3ddf
2437	DD	0x86db4478,0x86db4478
2438	DD	0x81f3afca,0x81f3afca
2439	DD	0x3ec468b9,0x3ec468b9
2440	DD	0x2c342438,0x2c342438
2441	DD	0x5f40a3c2,0x5f40a3c2
2442	DD	0x72c31d16,0x72c31d16
2443	DD	0x0c25e2bc,0x0c25e2bc
2444	DD	0x8b493c28,0x8b493c28
2445	DD	0x41950dff,0x41950dff
2446	DD	0x7101a839,0x7101a839
2447	DD	0xdeb30c08,0xdeb30c08
2448	DD	0x9ce4b4d8,0x9ce4b4d8
2449	DD	0x90c15664,0x90c15664
2450	DD	0x6184cb7b,0x6184cb7b
2451	DD	0x70b632d5,0x70b632d5
2452	DD	0x745c6c48,0x745c6c48
2453	DD	0x4257b8d0,0x4257b8d0
2454DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2455DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2456DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2457DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2458DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2459DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2460DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2461DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2462DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2463DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2464DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2465DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2466DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2467DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2468DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2469DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2470DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2471DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2472DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2473DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2474DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2475DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2476DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2477DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2478DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2479DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2480DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2481DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2482DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2483DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2484DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2485DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2486	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2487	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2488DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2489DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2490DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2491DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2492DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2493DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2494DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2495DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2496DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2497DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2498DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2499DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2500DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2501DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2502DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2503DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2504DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2505DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2506DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2507DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2508DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2509DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2510DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2511DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2512DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2513DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2514DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2515DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2516DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2517DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2518DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2519DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2520	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2521	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2522DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2523DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2524DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2525DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2526DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2527DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2528DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2529DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2530DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2531DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2532DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2533DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2534DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2535DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2536DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2537DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2538DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2539DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2540DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2541DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2542DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2543DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2544DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2545DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2546DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2547DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2548DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2549DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2550DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2551DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2552DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2553DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2554	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2555	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2556DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2557DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2558DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2559DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2560DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2561DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2562DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2563DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2564DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2565DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2566DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2567DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2568DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2569DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2570DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2571DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2572DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2573DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2574DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2575DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2576DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2577DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2578DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2579DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2580DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2581DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2582DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2583DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2584DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2585DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2586DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2587DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2588	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2589	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2590DB	65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2591DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2592DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2593DB	62,0
2594ALIGN	64
2595EXTERN	__imp_RtlVirtualUnwind
2596
2597ALIGN	16
2598block_se_handler:
2599	push	rsi
2600	push	rdi
2601	push	rbx
2602	push	rbp
2603	push	r12
2604	push	r13
2605	push	r14
2606	push	r15
2607	pushfq
2608	sub	rsp,64
2609
2610	mov	rax,QWORD[120+r8]
2611	mov	rbx,QWORD[248+r8]
2612
2613	mov	rsi,QWORD[8+r9]
2614	mov	r11,QWORD[56+r9]
2615
2616	mov	r10d,DWORD[r11]
2617	lea	r10,[r10*1+rsi]
2618	cmp	rbx,r10
2619	jb	NEAR $L$in_block_prologue
2620
2621	mov	rax,QWORD[152+r8]
2622
2623	mov	r10d,DWORD[4+r11]
2624	lea	r10,[r10*1+rsi]
2625	cmp	rbx,r10
2626	jae	NEAR $L$in_block_prologue
2627
2628	mov	rax,QWORD[24+rax]
2629	lea	rax,[48+rax]
2630
2631	mov	rbx,QWORD[((-8))+rax]
2632	mov	rbp,QWORD[((-16))+rax]
2633	mov	r12,QWORD[((-24))+rax]
2634	mov	r13,QWORD[((-32))+rax]
2635	mov	r14,QWORD[((-40))+rax]
2636	mov	r15,QWORD[((-48))+rax]
2637	mov	QWORD[144+r8],rbx
2638	mov	QWORD[160+r8],rbp
2639	mov	QWORD[216+r8],r12
2640	mov	QWORD[224+r8],r13
2641	mov	QWORD[232+r8],r14
2642	mov	QWORD[240+r8],r15
2643
2644$L$in_block_prologue:
2645	mov	rdi,QWORD[8+rax]
2646	mov	rsi,QWORD[16+rax]
2647	mov	QWORD[152+r8],rax
2648	mov	QWORD[168+r8],rsi
2649	mov	QWORD[176+r8],rdi
2650
2651	jmp	NEAR $L$common_seh_exit
2652
2653
2654
2655ALIGN	16
2656key_se_handler:
2657	push	rsi
2658	push	rdi
2659	push	rbx
2660	push	rbp
2661	push	r12
2662	push	r13
2663	push	r14
2664	push	r15
2665	pushfq
2666	sub	rsp,64
2667
2668	mov	rax,QWORD[120+r8]
2669	mov	rbx,QWORD[248+r8]
2670
2671	mov	rsi,QWORD[8+r9]
2672	mov	r11,QWORD[56+r9]
2673
2674	mov	r10d,DWORD[r11]
2675	lea	r10,[r10*1+rsi]
2676	cmp	rbx,r10
2677	jb	NEAR $L$in_key_prologue
2678
2679	mov	rax,QWORD[152+r8]
2680
2681	mov	r10d,DWORD[4+r11]
2682	lea	r10,[r10*1+rsi]
2683	cmp	rbx,r10
2684	jae	NEAR $L$in_key_prologue
2685
2686	lea	rax,[56+rax]
2687
2688	mov	rbx,QWORD[((-8))+rax]
2689	mov	rbp,QWORD[((-16))+rax]
2690	mov	r12,QWORD[((-24))+rax]
2691	mov	r13,QWORD[((-32))+rax]
2692	mov	r14,QWORD[((-40))+rax]
2693	mov	r15,QWORD[((-48))+rax]
2694	mov	QWORD[144+r8],rbx
2695	mov	QWORD[160+r8],rbp
2696	mov	QWORD[216+r8],r12
2697	mov	QWORD[224+r8],r13
2698	mov	QWORD[232+r8],r14
2699	mov	QWORD[240+r8],r15
2700
2701$L$in_key_prologue:
2702	mov	rdi,QWORD[8+rax]
2703	mov	rsi,QWORD[16+rax]
2704	mov	QWORD[152+r8],rax
2705	mov	QWORD[168+r8],rsi
2706	mov	QWORD[176+r8],rdi
2707
2708	jmp	NEAR $L$common_seh_exit
2709
2710
2711
2712ALIGN	16
2713cbc_se_handler:
2714	push	rsi
2715	push	rdi
2716	push	rbx
2717	push	rbp
2718	push	r12
2719	push	r13
2720	push	r14
2721	push	r15
2722	pushfq
2723	sub	rsp,64
2724
2725	mov	rax,QWORD[120+r8]
2726	mov	rbx,QWORD[248+r8]
2727
2728	lea	r10,[$L$cbc_prologue]
2729	cmp	rbx,r10
2730	jb	NEAR $L$in_cbc_prologue
2731
2732	lea	r10,[$L$cbc_fast_body]
2733	cmp	rbx,r10
2734	jb	NEAR $L$in_cbc_frame_setup
2735
2736	lea	r10,[$L$cbc_slow_prologue]
2737	cmp	rbx,r10
2738	jb	NEAR $L$in_cbc_body
2739
2740	lea	r10,[$L$cbc_slow_body]
2741	cmp	rbx,r10
2742	jb	NEAR $L$in_cbc_frame_setup
2743
2744$L$in_cbc_body:
2745	mov	rax,QWORD[152+r8]
2746
2747	lea	r10,[$L$cbc_epilogue]
2748	cmp	rbx,r10
2749	jae	NEAR $L$in_cbc_prologue
2750
2751	lea	rax,[8+rax]
2752
2753	lea	r10,[$L$cbc_popfq]
2754	cmp	rbx,r10
2755	jae	NEAR $L$in_cbc_prologue
2756
2757	mov	rax,QWORD[8+rax]
2758	lea	rax,[56+rax]
2759
2760$L$in_cbc_frame_setup:
2761	mov	rbx,QWORD[((-16))+rax]
2762	mov	rbp,QWORD[((-24))+rax]
2763	mov	r12,QWORD[((-32))+rax]
2764	mov	r13,QWORD[((-40))+rax]
2765	mov	r14,QWORD[((-48))+rax]
2766	mov	r15,QWORD[((-56))+rax]
2767	mov	QWORD[144+r8],rbx
2768	mov	QWORD[160+r8],rbp
2769	mov	QWORD[216+r8],r12
2770	mov	QWORD[224+r8],r13
2771	mov	QWORD[232+r8],r14
2772	mov	QWORD[240+r8],r15
2773
2774$L$in_cbc_prologue:
2775	mov	rdi,QWORD[8+rax]
2776	mov	rsi,QWORD[16+rax]
2777	mov	QWORD[152+r8],rax
2778	mov	QWORD[168+r8],rsi
2779	mov	QWORD[176+r8],rdi
2780
2781$L$common_seh_exit:
2782
2783	mov	rdi,QWORD[40+r9]
2784	mov	rsi,r8
2785	mov	ecx,154
2786	DD	0xa548f3fc
2787
2788	mov	rsi,r9
2789	xor	rcx,rcx
2790	mov	rdx,QWORD[8+rsi]
2791	mov	r8,QWORD[rsi]
2792	mov	r9,QWORD[16+rsi]
2793	mov	r10,QWORD[40+rsi]
2794	lea	r11,[56+rsi]
2795	lea	r12,[24+rsi]
2796	mov	QWORD[32+rsp],r10
2797	mov	QWORD[40+rsp],r11
2798	mov	QWORD[48+rsp],r12
2799	mov	QWORD[56+rsp],rcx
2800	call	QWORD[__imp_RtlVirtualUnwind]
2801
2802	mov	eax,1
2803	add	rsp,64
2804	popfq
2805	pop	r15
2806	pop	r14
2807	pop	r13
2808	pop	r12
2809	pop	rbp
2810	pop	rbx
2811	pop	rdi
2812	pop	rsi
2813	DB	0F3h,0C3h		;repret
2814
2815
2816section	.pdata rdata align=4
2817ALIGN	4
2818	DD	$L$SEH_begin_asm_AES_encrypt wrt ..imagebase
2819	DD	$L$SEH_end_asm_AES_encrypt wrt ..imagebase
2820	DD	$L$SEH_info_asm_AES_encrypt wrt ..imagebase
2821
2822	DD	$L$SEH_begin_asm_AES_decrypt wrt ..imagebase
2823	DD	$L$SEH_end_asm_AES_decrypt wrt ..imagebase
2824	DD	$L$SEH_info_asm_AES_decrypt wrt ..imagebase
2825
2826	DD	$L$SEH_begin_asm_AES_set_encrypt_key wrt ..imagebase
2827	DD	$L$SEH_end_asm_AES_set_encrypt_key wrt ..imagebase
2828	DD	$L$SEH_info_asm_AES_set_encrypt_key wrt ..imagebase
2829
2830	DD	$L$SEH_begin_asm_AES_set_decrypt_key wrt ..imagebase
2831	DD	$L$SEH_end_asm_AES_set_decrypt_key wrt ..imagebase
2832	DD	$L$SEH_info_asm_AES_set_decrypt_key wrt ..imagebase
2833
2834	DD	$L$SEH_begin_asm_AES_cbc_encrypt wrt ..imagebase
2835	DD	$L$SEH_end_asm_AES_cbc_encrypt wrt ..imagebase
2836	DD	$L$SEH_info_asm_AES_cbc_encrypt wrt ..imagebase
2837
2838section	.xdata rdata align=8
2839ALIGN	8
2840$L$SEH_info_asm_AES_encrypt:
2841DB	9,0,0,0
2842	DD	block_se_handler wrt ..imagebase
2843	DD	$L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
2844$L$SEH_info_asm_AES_decrypt:
2845DB	9,0,0,0
2846	DD	block_se_handler wrt ..imagebase
2847	DD	$L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
2848$L$SEH_info_asm_AES_set_encrypt_key:
2849DB	9,0,0,0
2850	DD	key_se_handler wrt ..imagebase
2851	DD	$L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
2852$L$SEH_info_asm_AES_set_decrypt_key:
2853DB	9,0,0,0
2854	DD	key_se_handler wrt ..imagebase
2855	DD	$L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
2856$L$SEH_info_asm_AES_cbc_encrypt:
2857DB	9,0,0,0
2858	DD	cbc_se_handler wrt ..imagebase
2859