	.file	"30030.c"
	.intel_syntax noprefix
	.text
	.globl	alphabet
	.data
	.align 16
	.type	alphabet, @object
	.size	alphabet, 28
alphabet:
	.string	"0ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	.globl	tasktab
	.bss
	.align 32
	.type	tasktab, @object
	.size	tasktab, 88
tasktab:
	.zero	88
	.globl	tasklist
	.align 8
	.type	tasklist, @object
	.size	tasklist, 8
tasklist:
	.zero	8
	.globl	tcb
	.align 8
	.type	tcb, @object
	.size	tcb, 8
tcb:
	.zero	8
	.globl	taskid
	.align 8
	.type	taskid, @object
	.size	taskid, 8
taskid:
	.zero	8
	.globl	v1
	.align 8
	.type	v1, @object
	.size	v1, 8
v1:
	.zero	8
	.globl	v2
	.align 8
	.type	v2, @object
	.size	v2, 8
v2:
	.zero	8
	.globl	qpktcount
	.align 4
	.type	qpktcount, @object
	.size	qpktcount, 4
qpktcount:
	.zero	4
	.globl	holdcount
	.align 4
	.type	holdcount, @object
	.size	holdcount, 4
holdcount:
	.zero	4
	.globl	tracing
	.data
	.align 4
	.type	tracing, @object
	.size	tracing, 4
tracing:
	.long	1
	.globl	layout
	.bss
	.align 4
	.type	layout, @object
	.size	layout, 4
layout:
	.zero	4
	.text
	.globl	createtask
	.type	createtask, @function
createtask:
.LFB6:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	QWORD PTR -32[rbp], rdx
	mov	DWORD PTR -36[rbp], ecx
	mov	QWORD PTR -48[rbp], r8
	mov	QWORD PTR -56[rbp], r9
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rcx, 0[0+rax*8]
	lea	rdx, tasktab[rip]
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR [rcx+rdx], rax
	mov	rdx, QWORD PTR tasklist[rip]
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -24[rbp]
	mov	DWORD PTR 12[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -36[rbp]
	mov	DWORD PTR 24[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 32[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -56[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR 16[rbp]
	mov	QWORD PTR 48[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR tasklist[rip], rax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	createtask, .-createtask
	.globl	pkt
	.type	pkt, @function
pkt:
.LFB7:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	DWORD PTR -28[rbp], esi
	mov	DWORD PTR -32[rbp], edx
	mov	edi, 24
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	DWORD PTR -12[rbp], 0
	jmp	.L3
.L4:
	mov	rdx, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR -12[rbp]
	cdqe
	mov	BYTE PTR 20[rdx+rax], 0
	add	DWORD PTR -12[rbp], 1
.L3:
	cmp	DWORD PTR -12[rbp], 3
	jle	.L4
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -28[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -32[rbp]
	mov	DWORD PTR 12[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	pkt, .-pkt
	.globl	trace
	.type	trace, @function
trace:
.LFB8:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	eax, edi
	mov	BYTE PTR -4[rbp], al
	mov	eax, DWORD PTR layout[rip]
	sub	eax, 1
	mov	DWORD PTR layout[rip], eax
	mov	eax, DWORD PTR layout[rip]
	test	eax, eax
	jg	.L7
	mov	edi, 10
	call	putchar@PLT
	mov	DWORD PTR layout[rip], 50
.L7:
	movsx	eax, BYTE PTR -4[rbp]
	mov	edi, eax
	call	putchar@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	trace, .-trace
	.globl	schedule
	.type	schedule, @function
schedule:
.LFB9:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	jmp	.L9
.L17:
	mov	QWORD PTR -16[rbp], 0
	mov	rax, QWORD PTR tcb[rip]
	mov	eax, DWORD PTR 24[rax]
	cmp	eax, 7
	jg	.L18
	cmp	eax, 4
	jge	.L11
	cmp	eax, 3
	je	.L12
	cmp	eax, 3
	jg	.L18
	cmp	eax, 1
	jg	.L13
	test	eax, eax
	jns	.L14
	jmp	.L18
.L13:
	cmp	eax, 2
	je	.L11
	jmp	.L18
.L12:
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR tcb[rip]
	mov	rdx, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR [rdx]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR 16[rax]
	test	rax, rax
	setne	dl
	mov	rax, QWORD PTR tcb[rip]
	movzx	edx, dl
	mov	DWORD PTR 24[rax], edx
.L14:
	mov	rax, QWORD PTR tcb[rip]
	mov	eax, DWORD PTR 8[rax]
	cdqe
	mov	QWORD PTR taskid[rip], rax
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR 40[rax]
	mov	QWORD PTR v1[rip], rax
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR v2[rip], rax
	mov	eax, DWORD PTR tracing[rip]
	cmp	eax, 1
	jne	.L15
	mov	rax, QWORD PTR taskid[rip]
	add	eax, 48
	movsx	eax, al
	mov	edi, eax
	call	trace
.L15:
	mov	rax, QWORD PTR tcb[rip]
	mov	rdx, QWORD PTR 32[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	rdx
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR tcb[rip]
	mov	rdx, QWORD PTR v1[rip]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR tcb[rip]
	mov	rdx, QWORD PTR v2[rip]
	mov	QWORD PTR 48[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR tcb[rip], rax
	jmp	.L9
.L11:
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR tcb[rip], rax
	nop
.L9:
	mov	rax, QWORD PTR tcb[rip]
	test	rax, rax
	jne	.L17
	jmp	.L8
.L18:
	nop
.L8:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	schedule, .-schedule
	.globl	Wait
	.type	Wait, @function
Wait:
.LFB10:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	rax, QWORD PTR tcb[rip]
	mov	edx, DWORD PTR 24[rax]
	mov	rax, QWORD PTR tcb[rip]
	or	edx, 2
	mov	DWORD PTR 24[rax], edx
	mov	rax, QWORD PTR tcb[rip]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	Wait, .-Wait
	.globl	holdself
	.type	holdself, @function
holdself:
.LFB11:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	eax, DWORD PTR holdcount[rip]
	add	eax, 1
	mov	DWORD PTR holdcount[rip], eax
	mov	rax, QWORD PTR tcb[rip]
	mov	edx, DWORD PTR 24[rax]
	mov	rax, QWORD PTR tcb[rip]
	or	edx, 4
	mov	DWORD PTR 24[rax], edx
	mov	rax, QWORD PTR tcb[rip]
	mov	rax, QWORD PTR [rax]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	holdself, .-holdself
	.section	.rodata
.LC0:
	.string	"\nBad task id %d\n"
	.text
	.globl	findtcb
	.type	findtcb, @function
findtcb:
.LFB12:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -8[rbp], 0
	cmp	DWORD PTR -20[rbp], 0
	jle	.L24
	cmp	DWORD PTR -20[rbp], 10
	jg	.L24
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*8]
	lea	rax, tasktab[rip]
	mov	rax, QWORD PTR [rdx+rax]
	mov	QWORD PTR -8[rbp], rax
.L24:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L25
	mov	eax, DWORD PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC0[rip]
	mov	eax, 0
	call	printf@PLT
.L25:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	findtcb, .-findtcb
	.globl	release
	.type	release, @function
release:
.LFB13:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	eax, DWORD PTR -20[rbp]
	mov	edi, eax
	call	findtcb
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L28
	mov	eax, 0
	jmp	.L29
.L28:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 24[rax]
	and	eax, 65531
	mov	edx, eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 24[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR 12[rax]
	mov	rax, QWORD PTR tcb[rip]
	mov	eax, DWORD PTR 12[rax]
	cmp	edx, eax
	jle	.L30
	mov	rax, QWORD PTR -8[rbp]
	jmp	.L29
.L30:
	mov	rax, QWORD PTR tcb[rip]
.L29:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	release, .-release
	.globl	qpkt
	.type	qpkt, @function
qpkt:
.LFB14:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 8[rax]
	mov	edi, eax
	call	findtcb
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L32
	mov	rax, QWORD PTR -8[rbp]
	jmp	.L33
.L32:
	mov	eax, DWORD PTR qpktcount[rip]
	add	eax, 1
	mov	DWORD PTR qpktcount[rip], eax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], 0
	mov	rax, QWORD PTR taskid[rip]
	mov	edx, eax
	mov	rax, QWORD PTR -24[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 16[rax]
	test	rax, rax
	jne	.L34
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 24[rax]
	or	eax, 1
	mov	edx, eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 24[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR 12[rax]
	mov	rax, QWORD PTR tcb[rip]
	mov	eax, DWORD PTR 12[rax]
	cmp	edx, eax
	jle	.L35
	mov	rax, QWORD PTR -8[rbp]
	jmp	.L33
.L34:
	mov	rax, QWORD PTR -8[rbp]
	lea	rdx, 16[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	append
.L35:
	mov	rax, QWORD PTR tcb[rip]
.L33:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	qpkt, .-qpkt
	.globl	idlefn
	.type	idlefn, @function
idlefn:
.LFB15:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	mov	rax, QWORD PTR v2[rip]
	sub	rax, 1
	mov	QWORD PTR v2[rip], rax
	mov	rax, QWORD PTR v2[rip]
	test	rax, rax
	jne	.L37
	call	holdself
	jmp	.L38
.L37:
	mov	rax, QWORD PTR v1[rip]
	and	eax, 1
	test	rax, rax
	jne	.L39
	mov	rax, QWORD PTR v1[rip]
	sar	rax
	and	eax, 32767
	mov	QWORD PTR v1[rip], rax
	mov	edi, 5
	call	release
	jmp	.L38
.L39:
	mov	rax, QWORD PTR v1[rip]
	sar	rax
	and	eax, 32767
	xor	rax, 53256
	mov	QWORD PTR v1[rip], rax
	mov	edi, 6
	call	release
.L38:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	idlefn, .-idlefn
	.globl	workfn
	.type	workfn, @function
workfn:
.LFB16:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	cmp	QWORD PTR -24[rbp], 0
	jne	.L41
	call	Wait
	jmp	.L42
.L41:
	mov	rdx, QWORD PTR v1[rip]
	mov	eax, 7
	sub	rax, rdx
	mov	QWORD PTR v1[rip], rax
	mov	rax, QWORD PTR v1[rip]
	mov	edx, eax
	mov	rax, QWORD PTR -24[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -24[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	DWORD PTR -4[rbp], 0
	jmp	.L43
.L45:
	mov	rax, QWORD PTR v2[rip]
	add	rax, 1
	mov	QWORD PTR v2[rip], rax
	mov	rax, QWORD PTR v2[rip]
	cmp	rax, 26
	jle	.L44
	mov	QWORD PTR v2[rip], 1
.L44:
	mov	rax, QWORD PTR v2[rip]
	lea	rdx, alphabet[rip]
	movzx	ecx, BYTE PTR [rax+rdx]
	mov	rdx, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	mov	BYTE PTR 20[rdx+rax], cl
	add	DWORD PTR -4[rbp], 1
.L43:
	cmp	DWORD PTR -4[rbp], 3
	jle	.L45
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	qpkt
.L42:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	workfn, .-workfn
	.globl	handlerfn
	.type	handlerfn, @function
handlerfn:
.LFB17:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	cmp	QWORD PTR -40[rbp], 0
	je	.L47
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR 12[rax]
	cmp	eax, 1001
	jne	.L48
	lea	rax, v1[rip]
	jmp	.L49
.L48:
	lea	rax, v2[rip]
.L49:
	mov	rdx, QWORD PTR -40[rbp]
	mov	rsi, rax
	mov	rdi, rdx
	call	append
.L47:
	mov	rax, QWORD PTR v1[rip]
	test	rax, rax
	je	.L50
	mov	rax, QWORD PTR v1[rip]
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	eax, DWORD PTR 16[rax]
	mov	DWORD PTR -20[rbp], eax
	cmp	DWORD PTR -20[rbp], 3
	jle	.L51
	mov	rax, QWORD PTR v1[rip]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR v1[rip], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	qpkt
	jmp	.L52
.L51:
	mov	rax, QWORD PTR v2[rip]
	test	rax, rax
	je	.L50
	mov	rax, QWORD PTR v2[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR v2[rip]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR v2[rip], rax
	mov	rdx, QWORD PTR -16[rbp]
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	movzx	eax, BYTE PTR 20[rdx+rax]
	movsx	edx, al
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], edx
	mov	eax, DWORD PTR -20[rbp]
	lea	edx, 1[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 16[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	qpkt
	jmp	.L52
.L50:
	call	Wait
.L52:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	handlerfn, .-handlerfn
	.globl	devfn
	.type	devfn, @function
devfn:
.LFB18:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	cmp	QWORD PTR -8[rbp], 0
	jne	.L54
	mov	rax, QWORD PTR v1[rip]
	test	rax, rax
	jne	.L55
	call	Wait
	jmp	.L56
.L55:
	mov	rax, QWORD PTR v1[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	QWORD PTR v1[rip], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	qpkt
	jmp	.L56
.L54:
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR v1[rip], rax
	mov	eax, DWORD PTR tracing[rip]
	cmp	eax, 1
	jne	.L57
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 16[rax]
	movsx	eax, al
	mov	edi, eax
	call	trace
.L57:
	call	holdself
.L56:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	devfn, .-devfn
	.globl	append
	.type	append, @function
append:
.LFB19:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -8[rbp], rdi
	mov	QWORD PTR -16[rbp], rsi
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR [rax], 0
	jmp	.L59
.L60:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR -16[rbp], rax
.L59:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	test	rax, rax
	jne	.L60
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -8[rbp]
	mov	QWORD PTR [rax], rdx
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.size	append, .-append
	.section	.rodata
.LC1:
	.string	"Bench mark starting"
.LC2:
	.string	"Starting"
.LC3:
	.string	"finished"
	.align 8
.LC4:
	.string	"qpkt count = %d  holdcount = %d\n"
.LC5:
	.string	"These results are "
.LC6:
	.string	"correct"
.LC7:
	.string	"incorrect"
.LC8:
	.string	"\nend of run"
	.text
	.globl	main
	.type	main, @function
main:
.LFB20:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], 0
	lea	rdi, .LC1[rip]
	call	puts@PLT
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	10000000
	mov	r9d, 1
	lea	r8, idlefn[rip]
	mov	ecx, 0
	mov	rdx, rax
	mov	esi, 0
	mov	edi, 1
	call	createtask
	add	rsp, 16
	mov	edx, 1001
	mov	esi, 0
	mov	edi, 0
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 1001
	mov	esi, 0
	mov	rdi, rax
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	0
	mov	r9d, 3
	lea	r8, workfn[rip]
	mov	ecx, 3
	mov	rdx, rax
	mov	esi, 1000
	mov	edi, 2
	call	createtask
	add	rsp, 16
	mov	edx, 1000
	mov	esi, 5
	mov	edi, 0
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 1000
	mov	esi, 5
	mov	rdi, rax
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 1000
	mov	esi, 5
	mov	rdi, rax
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	0
	mov	r9d, 0
	lea	r8, handlerfn[rip]
	mov	ecx, 3
	mov	rdx, rax
	mov	esi, 2000
	mov	edi, 3
	call	createtask
	add	rsp, 16
	mov	edx, 1000
	mov	esi, 6
	mov	edi, 0
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 1000
	mov	esi, 6
	mov	rdi, rax
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 1000
	mov	esi, 6
	mov	rdi, rax
	call	pkt
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	0
	mov	r9d, 0
	lea	r8, handlerfn[rip]
	mov	ecx, 3
	mov	rdx, rax
	mov	esi, 3000
	mov	edi, 4
	call	createtask
	add	rsp, 16
	mov	QWORD PTR -8[rbp], 0
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	0
	mov	r9d, 0
	lea	r8, devfn[rip]
	mov	ecx, 2
	mov	rdx, rax
	mov	esi, 4000
	mov	edi, 5
	call	createtask
	add	rsp, 16
	mov	rax, QWORD PTR -8[rbp]
	sub	rsp, 8
	push	0
	mov	r9d, 0
	lea	r8, devfn[rip]
	mov	ecx, 2
	mov	rdx, rax
	mov	esi, 5000
	mov	edi, 6
	call	createtask
	add	rsp, 16
	mov	rax, QWORD PTR tasklist[rip]
	mov	QWORD PTR tcb[rip], rax
	mov	DWORD PTR holdcount[rip], 0
	mov	eax, DWORD PTR holdcount[rip]
	mov	DWORD PTR qpktcount[rip], eax
	lea	rdi, .LC2[rip]
	call	puts@PLT
	mov	DWORD PTR tracing[rip], 0
	mov	DWORD PTR layout[rip], 0
	mov	eax, 0
	call	schedule
	lea	rdi, .LC3[rip]
	call	puts@PLT
	mov	edx, DWORD PTR holdcount[rip]
	mov	eax, DWORD PTR qpktcount[rip]
	mov	esi, eax
	lea	rdi, .LC4[rip]
	mov	eax, 0
	call	printf@PLT
	lea	rdi, .LC5[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR qpktcount[rip]
	cmp	eax, 23263894
	jne	.L62
	mov	eax, DWORD PTR holdcount[rip]
	cmp	eax, 9305557
	jne	.L62
	lea	rdi, .LC6[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -12[rbp], 0
	jmp	.L63
.L62:
	lea	rdi, .LC7[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -12[rbp], 1
.L63:
	lea	rdi, .LC8[rip]
	call	puts@PLT
	mov	eax, DWORD PTR -12[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE20:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"30030.c"
	.text
	.global	alphabet
	.data
	.align	2
	.type	alphabet, %object
	.size	alphabet, 28
alphabet:
	.ascii	"0ABCDEFGHIJKLMNOPQRSTUVWXYZ\000"
	.global	tasktab
	.bss
	.align	2
	.type	tasktab, %object
	.size	tasktab, 44
tasktab:
	.space	44
	.global	tasklist
	.align	2
	.type	tasklist, %object
	.size	tasklist, 4
tasklist:
	.space	4
	.comm	tcb,4,4
	.comm	taskid,4,4
	.comm	v1,4,4
	.comm	v2,4,4
	.global	qpktcount
	.align	2
	.type	qpktcount, %object
	.size	qpktcount, 4
qpktcount:
	.space	4
	.global	holdcount
	.align	2
	.type	holdcount, %object
	.size	holdcount, 4
holdcount:
	.space	4
	.global	tracing
	.data
	.align	2
	.type	tracing, %object
	.size	tracing, 4
tracing:
	.word	1
	.global	layout
	.bss
	.align	2
	.type	layout, %object
	.size	layout, 4
layout:
	.space	4
	.text
	.align	2
	.global	createtask
	.syntax unified
	.arm
	.fpu softvfp
	.type	createtask, %function
createtask:
	@ args = 12, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	str	r3, [fp, #-28]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r1, .L2
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-8]
	str	r2, [r1, r3, lsl #2]
	ldr	r3, .L2+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #4]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #8]
	str	r2, [r3, #24]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #12]
	str	r2, [r3, #28]
	ldr	r2, .L2+4
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L3:
	.align	2
.L2:
	.word	tasktab
	.word	tasklist
	.size	createtask, .-createtask
	.align	2
	.global	pkt
	.syntax unified
	.arm
	.fpu softvfp
	.type	pkt, %function
pkt:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r0, #20
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	mov	r3, #0
	str	r3, [fp, #-12]
	b	.L5
.L6:
	ldr	r2, [fp, #-8]
	ldr	r3, [fp, #-12]
	add	r3, r2, r3
	add	r3, r3, #16
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, [fp, #-12]
	add	r3, r3, #1
	str	r3, [fp, #-12]
.L5:
	ldr	r3, [fp, #-12]
	cmp	r3, #3
	ble	.L6
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	pkt, .-pkt
	.align	2
	.global	trace
	.syntax unified
	.arm
	.fpu softvfp
	.type	trace, %function
trace:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	mov	r3, r0
	strb	r3, [fp, #-5]
	ldr	r3, .L10
	ldr	r3, [r3]
	sub	r3, r3, #1
	ldr	r2, .L10
	str	r3, [r2]
	ldr	r3, .L10
	ldr	r3, [r3]
	cmp	r3, #0
	bgt	.L9
	mov	r0, #10
	bl	putchar
	ldr	r3, .L10
	mov	r2, #50
	str	r2, [r3]
.L9:
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	mov	r0, r3
	bl	putchar
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L11:
	.align	2
.L10:
	.word	layout
	.size	trace, .-trace
	.align	2
	.global	schedule
	.syntax unified
	.arm
	.fpu softvfp
	.type	schedule, %function
schedule:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	b	.L13
.L21:
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #16]
	cmp	r3, #7
	ldrls	pc, [pc, r3, asl #2]
	b	.L22
.L16:
	.word	.L18
	.word	.L18
	.word	.L15
	.word	.L17
	.word	.L15
	.word	.L15
	.word	.L15
	.word	.L15
.L17:
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-12]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r2, [fp, #-12]
	ldr	r2, [r2]
	str	r2, [r3, #12]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #12]
	cmp	r3, #0
	movne	r3, #1
	moveq	r3, #0
	and	r2, r3, #255
	ldr	r3, .L23
	ldr	r3, [r3]
	str	r2, [r3, #16]
.L18:
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	ldr	r2, .L23+4
	str	r3, [r2]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #24]
	ldr	r2, .L23+8
	str	r3, [r2]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #28]
	ldr	r2, .L23+12
	str	r3, [r2]
	ldr	r3, .L23+16
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L19
	ldr	r3, .L23+4
	ldr	r3, [r3]
	and	r3, r3, #255
	add	r3, r3, #48
	and	r3, r3, #255
	mov	r0, r3
	bl	trace
.L19:
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3, #20]
	ldr	r0, [fp, #-12]
	blx	r3
	str	r0, [fp, #-8]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r2, .L23+8
	ldr	r2, [r2]
	str	r2, [r3, #24]
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r2, .L23+12
	ldr	r2, [r2]
	str	r2, [r3, #28]
	ldr	r2, .L23
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	b	.L13
.L15:
	ldr	r3, .L23
	ldr	r3, [r3]
	ldr	r3, [r3]
	ldr	r2, .L23
	str	r3, [r2]
	nop
.L13:
	ldr	r3, .L23
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L21
	b	.L12
.L22:
	nop
.L12:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L24:
	.align	2
.L23:
	.word	tcb
	.word	taskid
	.word	v1
	.word	v2
	.word	tracing
	.size	schedule, .-schedule
	.align	2
	.global	Wait
	.syntax unified
	.arm
	.fpu softvfp
	.type	Wait, %function
Wait:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L27
	ldr	r3, [r3]
	ldr	r2, [r3, #16]
	ldr	r3, .L27
	ldr	r3, [r3]
	orr	r2, r2, #2
	str	r2, [r3, #16]
	ldr	r3, .L27
	ldr	r3, [r3]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L28:
	.align	2
.L27:
	.word	tcb
	.size	Wait, .-Wait
	.align	2
	.global	holdself
	.syntax unified
	.arm
	.fpu softvfp
	.type	holdself, %function
holdself:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L31
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L31
	str	r3, [r2]
	ldr	r3, .L31+4
	ldr	r3, [r3]
	ldr	r2, [r3, #16]
	ldr	r3, .L31+4
	ldr	r3, [r3]
	orr	r2, r2, #4
	str	r2, [r3, #16]
	ldr	r3, .L31+4
	ldr	r3, [r3]
	ldr	r3, [r3]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L32:
	.align	2
.L31:
	.word	holdcount
	.word	tcb
	.size	holdself, .-holdself
	.section	.rodata
	.align	2
.LC0:
	.ascii	"\012Bad task id %d\012\000"
	.text
	.align	2
	.global	findtcb
	.syntax unified
	.arm
	.fpu softvfp
	.type	findtcb, %function
findtcb:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	ble	.L34
	ldr	r3, [fp, #-16]
	cmp	r3, #10
	bgt	.L34
	ldr	r2, .L37
	ldr	r3, [fp, #-16]
	ldr	r3, [r2, r3, lsl #2]
	str	r3, [fp, #-8]
.L34:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L35
	ldr	r1, [fp, #-16]
	ldr	r0, .L37+4
	bl	printf
.L35:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L38:
	.align	2
.L37:
	.word	tasktab
	.word	.LC0
	.size	findtcb, .-findtcb
	.align	2
	.global	release
	.syntax unified
	.arm
	.fpu softvfp
	.type	release, %function
release:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r0, [fp, #-16]
	bl	findtcb
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L40
	mov	r3, #0
	b	.L41
.L40:
	ldr	r3, [fp, #-8]
	ldr	r2, [r3, #16]
	ldr	r3, .L43
	and	r3, r3, r2
	ldr	r2, [fp, #-8]
	str	r3, [r2, #16]
	ldr	r3, [fp, #-8]
	ldr	r2, [r3, #8]
	ldr	r3, .L43+4
	ldr	r3, [r3]
	ldr	r3, [r3, #8]
	cmp	r2, r3
	ble	.L42
	ldr	r3, [fp, #-8]
	b	.L41
.L42:
	ldr	r3, .L43+4
	ldr	r3, [r3]
.L41:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L44:
	.align	2
.L43:
	.word	65531
	.word	tcb
	.size	release, .-release
	.align	2
	.global	qpkt
	.syntax unified
	.arm
	.fpu softvfp
	.type	qpkt, %function
qpkt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	findtcb
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L46
	ldr	r3, [fp, #-8]
	b	.L47
.L46:
	ldr	r3, .L50
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L50
	str	r3, [r2]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, .L50+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	cmp	r3, #0
	bne	.L48
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #16]
	orr	r2, r3, #1
	ldr	r3, [fp, #-8]
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	ldr	r2, [r3, #8]
	ldr	r3, .L50+8
	ldr	r3, [r3]
	ldr	r3, [r3, #8]
	cmp	r2, r3
	ble	.L49
	ldr	r3, [fp, #-8]
	b	.L47
.L48:
	ldr	r3, [fp, #-8]
	add	r3, r3, #12
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	append
.L49:
	ldr	r3, .L50+8
	ldr	r3, [r3]
.L47:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L51:
	.align	2
.L50:
	.word	qpktcount
	.word	taskid
	.word	tcb
	.size	qpkt, .-qpkt
	.align	2
	.global	idlefn
	.syntax unified
	.arm
	.fpu softvfp
	.type	idlefn, %function
idlefn:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r3, .L56
	ldr	r3, [r3]
	sub	r3, r3, #1
	ldr	r2, .L56
	str	r3, [r2]
	ldr	r3, .L56
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L53
	bl	holdself
	mov	r3, r0
	b	.L54
.L53:
	ldr	r3, .L56+4
	ldr	r3, [r3]
	and	r3, r3, #1
	cmp	r3, #0
	bne	.L55
	ldr	r3, .L56+4
	ldr	r3, [r3]
	asr	r3, r3, #1
	lsl	r3, r3, #17
	lsr	r3, r3, #17
	ldr	r2, .L56+4
	str	r3, [r2]
	mov	r0, #5
	bl	release
	mov	r3, r0
	b	.L54
.L55:
	ldr	r3, .L56+4
	ldr	r3, [r3]
	asr	r3, r3, #1
	lsl	r3, r3, #17
	lsr	r3, r3, #17
	eor	r3, r3, #53248
	eor	r3, r3, #8
	ldr	r2, .L56+4
	str	r3, [r2]
	mov	r0, #6
	bl	release
	mov	r3, r0
.L54:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L57:
	.align	2
.L56:
	.word	v2
	.word	v1
	.size	idlefn, .-idlefn
	.align	2
	.global	workfn
	.syntax unified
	.arm
	.fpu softvfp
	.type	workfn, %function
workfn:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L59
	bl	Wait
	mov	r3, r0
	b	.L60
.L59:
	ldr	r3, .L64
	ldr	r3, [r3]
	rsb	r3, r3, #7
	ldr	r2, .L64
	str	r3, [r2]
	ldr	r3, .L64
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #12]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L61
.L63:
	ldr	r3, .L64+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L64+4
	str	r3, [r2]
	ldr	r3, .L64+4
	ldr	r3, [r3]
	cmp	r3, #26
	ble	.L62
	ldr	r3, .L64+4
	mov	r2, #1
	str	r2, [r3]
.L62:
	ldr	r3, .L64+4
	ldr	r3, [r3]
	ldr	r2, .L64+8
	ldrb	r1, [r2, r3]	@ zero_extendqisi2
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	add	r3, r3, #16
	mov	r2, r1
	strb	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L61:
	ldr	r3, [fp, #-8]
	cmp	r3, #3
	ble	.L63
	ldr	r0, [fp, #-16]
	bl	qpkt
	mov	r3, r0
.L60:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L65:
	.align	2
.L64:
	.word	v1
	.word	v2
	.word	alphabet
	.size	workfn, .-workfn
	.align	2
	.global	handlerfn
	.syntax unified
	.arm
	.fpu softvfp
	.type	handlerfn, %function
handlerfn:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L67
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	ldr	r2, .L73
	cmp	r3, r2
	bne	.L68
	ldr	r3, .L73+4
	b	.L69
.L68:
	ldr	r3, .L73+8
.L69:
	mov	r1, r3
	ldr	r0, [fp, #-24]
	bl	append
.L67:
	ldr	r3, .L73+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L70
	ldr	r3, .L73+4
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #3
	ble	.L71
	ldr	r3, .L73+4
	ldr	r3, [r3]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r3, .L73+4
	str	r2, [r3]
	ldr	r0, [fp, #-16]
	bl	qpkt
	mov	r3, r0
	b	.L72
.L71:
	ldr	r3, .L73+8
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L70
	ldr	r3, .L73+8
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, .L73+8
	ldr	r3, [r3]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r3, .L73+8
	str	r2, [r3]
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-12]
	add	r3, r2, r3
	add	r3, r3, #16
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r3, [fp, #-8]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-12]
	add	r2, r3, #1
	ldr	r3, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r0, [fp, #-8]
	bl	qpkt
	mov	r3, r0
	b	.L72
.L70:
	bl	Wait
	mov	r3, r0
.L72:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L74:
	.align	2
.L73:
	.word	1001
	.word	v1
	.word	v2
	.size	handlerfn, .-handlerfn
	.align	2
	.global	devfn
	.syntax unified
	.arm
	.fpu softvfp
	.type	devfn, %function
devfn:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L76
	ldr	r3, .L80
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L77
	bl	Wait
	mov	r3, r0
	b	.L78
.L77:
	ldr	r3, .L80
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, .L80
	mov	r2, #0
	str	r2, [r3]
	ldr	r0, [fp, #-8]
	bl	qpkt
	mov	r3, r0
	b	.L78
.L76:
	ldr	r3, [fp, #-8]
	ldr	r2, .L80
	str	r3, [r2]
	ldr	r3, .L80+4
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L79
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	and	r3, r3, #255
	mov	r0, r3
	bl	trace
.L79:
	bl	holdself
	mov	r3, r0
.L78:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L81:
	.align	2
.L80:
	.word	v1
	.word	tracing
	.size	devfn, .-devfn
	.align	2
	.global	append
	.syntax unified
	.arm
	.fpu softvfp
	.type	append, %function
append:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #12
	str	r0, [fp, #-8]
	str	r1, [fp, #-12]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3]
	b	.L83
.L84:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3]
	str	r3, [fp, #-12]
.L83:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L84
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-8]
	str	r2, [r3]
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	append, .-append
	.section	.rodata
	.align	2
.LC1:
	.ascii	"Bench mark starting\000"
	.align	2
.LC2:
	.ascii	"Starting\000"
	.align	2
.LC3:
	.ascii	"finished\000"
	.align	2
.LC4:
	.ascii	"qpkt count = %d  holdcount = %d\012\000"
	.align	2
.LC5:
	.ascii	"These results are \000"
	.align	2
.LC6:
	.ascii	"correct\000"
	.align	2
.LC7:
	.ascii	"incorrect\000"
	.align	2
.LC8:
	.ascii	"\012end of run\000"
	.text
	.align	2
	.global	main
	.syntax unified
	.arm
	.fpu softvfp
	.type	main, %function
main:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r0, .L89
	bl	puts
	ldr	r3, .L89+4
	str	r3, [sp, #8]
	mov	r3, #1
	str	r3, [sp, #4]
	ldr	r3, .L89+8
	str	r3, [sp]
	mov	r3, #0
	ldr	r2, [fp, #-8]
	mov	r1, #0
	mov	r0, #1
	bl	createtask
	ldr	r2, .L89+12
	mov	r1, #0
	mov	r0, #0
	bl	pkt
	str	r0, [fp, #-8]
	ldr	r2, .L89+12
	mov	r1, #0
	ldr	r0, [fp, #-8]
	bl	pkt
	str	r0, [fp, #-8]
	mov	r3, #0
	str	r3, [sp, #8]
	mov	r3, #3
	str	r3, [sp, #4]
	ldr	r3, .L89+16
	str	r3, [sp]
	mov	r3, #3
	ldr	r2, [fp, #-8]
	mov	r1, #1000
	mov	r0, #2
	bl	createtask
	mov	r2, #1000
	mov	r1, #5
	mov	r0, #0
	bl	pkt
	str	r0, [fp, #-8]
	mov	r2, #1000
	mov	r1, #5
	ldr	r0, [fp, #-8]
	bl	pkt
	str	r0, [fp, #-8]
	mov	r2, #1000
	mov	r1, #5
	ldr	r0, [fp, #-8]
	bl	pkt
	str	r0, [fp, #-8]
	mov	r3, #0
	str	r3, [sp, #8]
	mov	r3, #0
	str	r3, [sp, #4]
	ldr	r3, .L89+20
	str	r3, [sp]
	mov	r3, #3
	ldr	r2, [fp, #-8]
	mov	r1, #2000
	mov	r0, #3
	bl	createtask
	mov	r2, #1000
	mov	r1, #6
	mov	r0, #0
	bl	pkt
	str	r0, [fp, #-8]
	mov	r2, #1000
	mov	r1, #6
	ldr	r0, [fp, #-8]
	bl	pkt
	str	r0, [fp, #-8]
	mov	r2, #1000
	mov	r1, #6
	ldr	r0, [fp, #-8]
	bl	pkt
	str	r0, [fp, #-8]
	mov	r3, #0
	str	r3, [sp, #8]
	mov	r3, #0
	str	r3, [sp, #4]
	ldr	r3, .L89+20
	str	r3, [sp]
	mov	r3, #3
	ldr	r2, [fp, #-8]
	ldr	r1, .L89+24
	mov	r0, #4
	bl	createtask
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r3, #0
	str	r3, [sp, #8]
	mov	r3, #0
	str	r3, [sp, #4]
	ldr	r3, .L89+28
	str	r3, [sp]
	mov	r3, #2
	ldr	r2, [fp, #-8]
	mov	r1, #4000
	mov	r0, #5
	bl	createtask
	mov	r3, #0
	str	r3, [sp, #8]
	mov	r3, #0
	str	r3, [sp, #4]
	ldr	r3, .L89+28
	str	r3, [sp]
	mov	r3, #2
	ldr	r2, [fp, #-8]
	ldr	r1, .L89+32
	mov	r0, #6
	bl	createtask
	ldr	r3, .L89+36
	ldr	r3, [r3]
	ldr	r2, .L89+40
	str	r3, [r2]
	ldr	r3, .L89+44
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, .L89+44
	ldr	r3, [r3]
	ldr	r2, .L89+48
	str	r3, [r2]
	ldr	r0, .L89+52
	bl	puts
	ldr	r3, .L89+56
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, .L89+60
	mov	r2, #0
	str	r2, [r3]
	bl	schedule
	ldr	r0, .L89+64
	bl	puts
	ldr	r3, .L89+48
	ldr	r3, [r3]
	ldr	r2, .L89+44
	ldr	r2, [r2]
	mov	r1, r3
	ldr	r0, .L89+68
	bl	printf
	ldr	r0, .L89+72
	bl	printf
	ldr	r3, .L89+48
	ldr	r3, [r3]
	ldr	r2, .L89+76
	cmp	r3, r2
	bne	.L86
	ldr	r3, .L89+44
	ldr	r3, [r3]
	ldr	r2, .L89+80
	cmp	r3, r2
	bne	.L86
	ldr	r0, .L89+84
	bl	printf
	mov	r3, #0
	str	r3, [fp, #-12]
	b	.L87
.L86:
	ldr	r0, .L89+88
	bl	printf
	mov	r3, #1
	str	r3, [fp, #-12]
.L87:
	ldr	r0, .L89+92
	bl	puts
	ldr	r3, [fp, #-12]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L90:
	.align	2
.L89:
	.word	.LC1
	.word	10000000
	.word	idlefn
	.word	1001
	.word	workfn
	.word	handlerfn
	.word	3000
	.word	devfn
	.word	5000
	.word	tasklist
	.word	tcb
	.word	holdcount
	.word	qpktcount
	.word	.LC2
	.word	tracing
	.word	layout
	.word	.LC3
	.word	.LC4
	.word	.LC5
	.word	23263894
	.word	9305557
	.word	.LC6
	.word	.LC7
	.word	.LC8
	.size	main, .-main
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
