	.file	"398739.c"
	.intel_syntax noprefix
	.text
	.section	.rodata
.LC0:
	.string	"7,16,18,22"
	.section	.data.rel.local,"aw"
	.align 8
	.type	default_p1_pins, @object
	.size	default_p1_pins, 8
default_p1_pins:
	.quad	.LC0
	.section	.rodata
.LC1:
	.string	""
	.section	.data.rel.local
	.align 8
	.type	default_p5_pins, @object
	.size	default_p5_pins, 8
default_p5_pins:
	.quad	.LC1
	.data
	.align 16
	.type	rev1_p1pin2gpio_map, @object
	.size	rev1_p1pin2gpio_map, 26
rev1_p1pin2gpio_map:
	.string	"\377\377"
	.ascii	"\377\001\377\004\016\377\017\021\022\025\377\026\027\377\030"
	.ascii	"\n\377\t\031\013\b\377\007"
	.align 8
	.type	rev1_p5pin2gpio_map, @object
	.size	rev1_p5pin2gpio_map, 8
rev1_p5pin2gpio_map:
	.ascii	"\377\377\377\377\377\377\377\377"
	.align 16
	.type	rev2_p1pin2gpio_map, @object
	.size	rev2_p1pin2gpio_map, 26
rev2_p1pin2gpio_map:
	.ascii	"\377\377\002\377\003\377\004\016\377\017\021\022\033\377\026"
	.ascii	"\027\377\030\n\377\t\031\013\b\377\007"
	.align 8
	.type	rev2_p5pin2gpio_map, @object
	.size	rev2_p5pin2gpio_map, 8
rev2_p5pin2gpio_map:
	.ascii	"\377\377\034\035\036\037\377\377"
	.local	cycle_time_us
	.comm	cycle_time_us,4,4
	.local	step_time_us
	.comm	step_time_us,4,4
	.local	servo2gpio
	.comm	servo2gpio,32,32
	.local	p1pin2servo
	.comm	p1pin2servo,27,16
	.local	p5pin2servo
	.comm	p5pin2servo,9,8
	.local	servostart
	.comm	servostart,128,32
	.local	servowidth
	.comm	servowidth,128,32
	.local	num_servos
	.comm	num_servos,4,4
	.local	gpiomode
	.comm	gpiomode,128,32
	.local	restore_gpio_modes
	.comm	restore_gpio_modes,4,4
	.globl	page_map
	.bss
	.align 8
	.type	page_map, @object
	.size	page_map, 8
page_map:
	.zero	8
	.local	virtbase
	.comm	virtbase,8,8
	.local	virtcached
	.comm	virtcached,8,8
	.local	pwm_reg
	.comm	pwm_reg,8,8
	.local	pcm_reg
	.comm	pcm_reg,8,8
	.local	clk_reg
	.comm	clk_reg,8,8
	.local	dma_reg
	.comm	dma_reg,8,8
	.local	gpio_reg
	.comm	gpio_reg,8,8
	.local	delay_hw
	.comm	delay_hw,4,4
	.local	servo_kill_time
	.comm	servo_kill_time,8,8
	.local	dma_chan
	.comm	dma_chan,4,4
	.local	idle_timeout
	.comm	idle_timeout,4,4
	.local	invert
	.comm	invert,4,4
	.local	servo_min_ticks
	.comm	servo_min_ticks,4,4
	.local	servo_max_ticks
	.comm	servo_max_ticks,4,4
	.local	num_samples
	.comm	num_samples,4,4
	.local	num_cbs
	.comm	num_cbs,4,4
	.local	num_pages
	.comm	num_pages,4,4
	.local	turnoff_mask
	.comm	turnoff_mask,8,8
	.local	turnon_mask
	.comm	turnon_mask,8,8
	.local	cb_base
	.comm	cb_base,8,8
	.text
	.type	udelay, @function
udelay:
.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, 48
	mov	DWORD PTR -36[rbp], edi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	QWORD PTR -32[rbp], 0
	mov	eax, DWORD PTR -36[rbp]
	imul	eax, eax, 1000
	cdqe
	mov	QWORD PTR -24[rbp], rax
	lea	rax, -32[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	nanosleep@PLT
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L2
	call	__stack_chk_fail@PLT
.L2:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	udelay, .-udelay
	.section	.rodata
.LC2:
	.string	"/dev/servoblaster"
.LC3:
	.string	"/dev/servoblaster-cfg"
	.text
	.type	terminate, @function
terminate:
.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	DWORD PTR -20[rbp], edi
	mov	rax, QWORD PTR dma_reg[rip]
	test	rax, rax
	je	.L4
	mov	rax, QWORD PTR virtbase[rip]
	test	rax, rax
	je	.L4
	mov	DWORD PTR -4[rbp], 0
	jmp	.L5
.L7:
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L6
	mov	eax, DWORD PTR -4[rbp]
	mov	esi, 0
	mov	edi, eax
	call	set_servo
.L6:
	add	DWORD PTR -4[rbp], 1
.L5:
	cmp	DWORD PTR -4[rbp], 31
	jle	.L7
	mov	eax, DWORD PTR cycle_time_us[rip]
	mov	edi, eax
	call	udelay
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], -2147483648
	mov	edi, 10
	call	udelay
.L4:
	mov	eax, DWORD PTR restore_gpio_modes[rip]
	test	eax, eax
	je	.L8
	mov	DWORD PTR -4[rbp], 0
	jmp	.L9
.L11:
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L10
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, gpiomode[rip]
	mov	edx, DWORD PTR [rdx+rax]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rcx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rcx]
	movzx	eax, al
	mov	esi, edx
	mov	edi, eax
	call	gpio_set_mode
.L10:
	add	DWORD PTR -4[rbp], 1
.L9:
	cmp	DWORD PTR -4[rbp], 31
	jle	.L11
.L8:
	lea	rdi, .LC2[rip]
	call	unlink@PLT
	lea	rdi, .LC3[rip]
	call	unlink@PLT
	mov	edi, 1
	call	exit@PLT
	.cfi_endproc
.LFE7:
	.size	terminate, .-terminate
	.type	fatal, @function
fatal:
.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, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L13
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L13:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	mov	rax, QWORD PTR stderr[rip]
	lea	rdx, -208[rbp]
	mov	rcx, QWORD PTR -216[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	vfprintf@PLT
	mov	edi, 0
	call	terminate
	nop
	mov	rax, QWORD PTR -184[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L14
	call	__stack_chk_fail@PLT
.L14:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	fatal, .-fatal
	.section	.rodata
.LC4:
	.string	"servod: calloc() failed\n"
	.text
	.type	init_idle_timers, @function
init_idle_timers:
.LFB9:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	esi, 16
	mov	edi, 32
	call	calloc@PLT
	mov	QWORD PTR servo_kill_time[rip], rax
	mov	rax, QWORD PTR servo_kill_time[rip]
	test	rax, rax
	jne	.L17
	lea	rdi, .LC4[rip]
	mov	eax, 0
	call	fatal
.L17:
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	init_idle_timers, .-init_idle_timers
	.type	update_idle_time, @function
update_idle_time:
.LFB10:
	.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	DWORD PTR -4[rbp], edi
	mov	eax, DWORD PTR idle_timeout[rip]
	test	eax, eax
	je	.L23
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	esi, 0
	mov	rdi, rax
	call	gettimeofday@PLT
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rcx, QWORD PTR [rax]
	mov	eax, DWORD PTR idle_timeout[rip]
	movsx	rdx, eax
	imul	rdx, rdx, 274877907
	shr	rdx, 32
	sar	edx, 6
	sar	eax, 31
	mov	esi, eax
	mov	eax, edx
	sub	eax, esi
	movsx	rdx, eax
	mov	rsi, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rsi
	add	rdx, rcx
	mov	QWORD PTR [rax], rdx
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rcx, QWORD PTR 8[rax]
	mov	eax, DWORD PTR idle_timeout[rip]
	movsx	rdx, eax
	imul	rdx, rdx, 274877907
	shr	rdx, 32
	sar	edx, 6
	mov	esi, eax
	sar	esi, 31
	sub	edx, esi
	imul	esi, edx, 1000
	sub	eax, esi
	mov	edx, eax
	imul	eax, edx, 1000
	movsx	rdx, eax
	mov	rsi, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rsi
	add	rdx, rcx
	mov	QWORD PTR 8[rax], rdx
	jmp	.L21
.L22:
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rdx, QWORD PTR 8[rax]
	mov	rcx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rcx
	sub	rdx, 1000000
	mov	QWORD PTR 8[rax], rdx
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rdx, QWORD PTR [rax]
	add	rdx, 1
	mov	QWORD PTR [rax], rdx
.L21:
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rax, QWORD PTR 8[rax]
	cmp	rax, 999999
	jg	.L22
	jmp	.L18
.L23:
	nop
.L18:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	update_idle_time, .-update_idle_time
	.type	get_next_idle_timeout, @function
get_next_idle_timeout:
.LFB11:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 96
	mov	QWORD PTR -88[rbp], rdi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	QWORD PTR -32[rbp], 60
	mov	QWORD PTR -24[rbp], 0
	lea	rax, -48[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	gettimeofday@PLT
	mov	DWORD PTR -68[rbp], 0
	jmp	.L25
.L31:
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L33
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rax, QWORD PTR [rax]
	test	rax, rax
	je	.L33
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -48[rbp]
	cmp	rdx, rax
	jl	.L29
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -48[rbp]
	cmp	rdx, rax
	jne	.L30
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -40[rbp]
	cmp	rdx, rax
	jg	.L30
.L29:
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	QWORD PTR [rax], 0
	mov	eax, DWORD PTR -68[rbp]
	mov	edi, eax
	call	set_servo_idle
	jmp	.L28
.L30:
	mov	rdx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -48[rbp]
	sub	rax, rdx
	imul	rdx, rax, 1000000
	mov	rcx, QWORD PTR servo_kill_time[rip]
	mov	eax, DWORD PTR -68[rbp]
	cdqe
	sal	rax, 4
	add	rax, rcx
	mov	rax, QWORD PTR 8[rax]
	add	rax, rdx
	mov	rdx, QWORD PTR -40[rbp]
	sub	rax, rdx
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	imul	rdx, rax, 1000000
	mov	rax, QWORD PTR -24[rbp]
	add	rax, rdx
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	cmp	rax, QWORD PTR -56[rbp]
	jge	.L28
	mov	rcx, QWORD PTR -64[rbp]
	movabs	rdx, 4835703278458516699
	mov	rax, rcx
	imul	rdx
	mov	rax, rdx
	sar	rax, 18
	sar	rcx, 63
	mov	rdx, rcx
	sub	rax, rdx
	mov	QWORD PTR -32[rbp], rax
	mov	rcx, QWORD PTR -64[rbp]
	movabs	rdx, 4835703278458516699
	mov	rax, rcx
	imul	rdx
	mov	rax, rdx
	sar	rax, 18
	mov	rdx, rcx
	sar	rdx, 63
	sub	rax, rdx
	imul	rdx, rax, 1000000
	mov	rax, rcx
	sub	rax, rdx
	mov	QWORD PTR -24[rbp], rax
	jmp	.L28
.L33:
	nop
.L28:
	add	DWORD PTR -68[rbp], 1
.L25:
	cmp	DWORD PTR -68[rbp], 31
	jle	.L31
	mov	rcx, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rcx], rax
	mov	QWORD PTR 8[rcx], rdx
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L32
	call	__stack_chk_fail@PLT
.L32:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	get_next_idle_timeout, .-get_next_idle_timeout
	.type	gpio_get_mode, @function
gpio_get_mode:
.LFB12:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -20[rbp], edi
	mov	rdx, QWORD PTR gpio_reg[rip]
	mov	eax, DWORD PTR -20[rbp]
	mov	ecx, eax
	mov	eax, 3435973837
	imul	rax, rcx
	shr	rax, 32
	shr	eax, 3
	mov	eax, eax
	sal	rax, 2
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	mov	DWORD PTR -4[rbp], eax
	mov	ecx, DWORD PTR -20[rbp]
	mov	edx, ecx
	mov	eax, 3435973837
	imul	rax, rdx
	shr	rax, 32
	mov	edx, eax
	shr	edx, 3
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	sub	ecx, eax
	mov	edx, ecx
	mov	eax, edx
	add	eax, eax
	add	eax, edx
	mov	edx, DWORD PTR -4[rbp]
	mov	ecx, eax
	shr	edx, cl
	mov	eax, edx
	and	eax, 7
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	gpio_get_mode, .-gpio_get_mode
	.type	gpio_set_mode, @function
gpio_set_mode:
.LFB13:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	rdx, QWORD PTR gpio_reg[rip]
	mov	eax, DWORD PTR -20[rbp]
	mov	ecx, eax
	mov	eax, 3435973837
	imul	rax, rcx
	shr	rax, 32
	shr	eax, 3
	mov	eax, eax
	sal	rax, 2
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	mov	DWORD PTR -4[rbp], eax
	mov	ecx, DWORD PTR -20[rbp]
	mov	edx, ecx
	mov	eax, 3435973837
	imul	rax, rdx
	shr	rax, 32
	mov	edx, eax
	shr	edx, 3
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	sub	ecx, eax
	mov	edx, ecx
	mov	eax, edx
	add	eax, eax
	add	eax, edx
	mov	edx, 7
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	not	eax
	and	DWORD PTR -4[rbp], eax
	mov	ecx, DWORD PTR -20[rbp]
	mov	edx, ecx
	mov	eax, 3435973837
	imul	rax, rdx
	shr	rax, 32
	mov	edx, eax
	shr	edx, 3
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	sub	ecx, eax
	mov	edx, ecx
	mov	eax, edx
	add	eax, eax
	add	eax, edx
	mov	edx, DWORD PTR -24[rbp]
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -4[rbp], eax
	mov	rdx, QWORD PTR gpio_reg[rip]
	mov	eax, DWORD PTR -20[rbp]
	mov	ecx, eax
	mov	eax, 3435973837
	imul	rax, rcx
	shr	rax, 32
	shr	eax, 3
	mov	eax, eax
	sal	rax, 2
	add	rdx, rax
	mov	eax, DWORD PTR -4[rbp]
	mov	DWORD PTR [rdx], eax
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	gpio_set_mode, .-gpio_set_mode
	.type	gpio_set, @function
gpio_set:
.LFB14:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -4[rbp], edi
	mov	DWORD PTR -8[rbp], esi
	cmp	DWORD PTR -8[rbp], 0
	je	.L38
	mov	eax, DWORD PTR -4[rbp]
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	rax, QWORD PTR gpio_reg[rip]
	add	rax, 28
	mov	DWORD PTR [rax], edx
	jmp	.L40
.L38:
	mov	eax, DWORD PTR -4[rbp]
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	rax, QWORD PTR gpio_reg[rip]
	add	rax, 40
	mov	DWORD PTR [rax], edx
.L40:
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	gpio_set, .-gpio_set
	.type	mem_virt_to_phys, @function
mem_virt_to_phys:
.LFB15:
	.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 -24[rbp], rdi
	mov	rdx, QWORD PTR virtbase[rip]
	mov	rax, QWORD PTR -24[rbp]
	sub	rax, rdx
	mov	DWORD PTR -4[rbp], eax
	mov	rdx, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -4[rbp]
	shr	eax, 12
	mov	eax, eax
	sal	rax, 2
	add	rax, rdx
	mov	edx, DWORD PTR [rax]
	mov	eax, DWORD PTR -4[rbp]
	and	eax, 4095
	add	eax, edx
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	mem_virt_to_phys, .-mem_virt_to_phys
	.section	.rodata
.LC5:
	.string	"/dev/mem"
	.align 8
.LC6:
	.string	"servod: Failed to open /dev/mem: %m\n"
	.align 8
.LC7:
	.string	"servod: Failed to map peripheral at 0x%08x: %m\n"
	.text
	.type	map_peripheral, @function
map_peripheral:
.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	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	esi, 2
	lea	rdi, .LC5[rip]
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], 0
	jns	.L44
	lea	rdi, .LC6[rip]
	mov	eax, 0
	call	fatal
.L44:
	mov	ecx, DWORD PTR -20[rbp]
	mov	eax, DWORD PTR -24[rbp]
	mov	edx, DWORD PTR -12[rbp]
	mov	r9, rcx
	mov	r8d, edx
	mov	ecx, 1
	mov	edx, 3
	mov	rsi, rax
	mov	edi, 0
	call	mmap@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], -1
	jne	.L45
	mov	eax, DWORD PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC7[rip]
	mov	eax, 0
	call	fatal
.L45:
	mov	eax, DWORD PTR -12[rbp]
	mov	edi, eax
	call	close@PLT
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	map_peripheral, .-map_peripheral
	.type	set_servo_idle, @function
set_servo_idle:
.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, 8
	mov	DWORD PTR -4[rbp], edi
	mov	rdx, QWORD PTR turnon_mask[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	DWORD PTR [rax], 0
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	edx, DWORD PTR [rdx+rax]
	mov	eax, DWORD PTR num_samples[rip]
	cmp	edx, eax
	jne	.L49
	mov	eax, DWORD PTR invert[rip]
	test	eax, eax
	setne	al
	movzx	edx, al
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rcx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rcx]
	movzx	eax, al
	mov	esi, edx
	mov	edi, eax
	call	gpio_set
.L49:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	set_servo_idle, .-set_servo_idle
	.type	set_servo, @function
set_servo:
.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, 32
	mov	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	mov	DWORD PTR -12[rbp], eax
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -24[rbp], eax
	jle	.L51
	mov	rcx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servostart[rip]
	mov	eax, DWORD PTR [rdx+rax]
	movsx	rdx, eax
	mov	eax, DWORD PTR -24[rbp]
	cdqe
	add	rax, rdx
	sal	rax, 2
	add	rax, rcx
	mov	QWORD PTR -8[rbp], rax
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	add	rax, rdx
	cmp	QWORD PTR -8[rbp], rax
	jb	.L52
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	neg	rax
	add	QWORD PTR -8[rbp], rax
.L52:
	mov	eax, DWORD PTR -24[rbp]
	mov	DWORD PTR -16[rbp], eax
	jmp	.L53
.L55:
	sub	QWORD PTR -8[rbp], 4
	mov	rax, QWORD PTR turnoff_mask[rip]
	cmp	QWORD PTR -8[rbp], rax
	jnb	.L54
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	sub	rax, 4
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
.L54:
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR [rax]
	mov	eax, DWORD PTR -12[rbp]
	not	eax
	and	edx, eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], edx
	sub	DWORD PTR -16[rbp], 1
.L53:
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -16[rbp], eax
	jg	.L55
	jmp	.L56
.L51:
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -24[rbp], eax
	jge	.L56
	mov	rcx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servostart[rip]
	mov	eax, DWORD PTR [rdx+rax]
	movsx	rdx, eax
	mov	eax, DWORD PTR -24[rbp]
	cdqe
	add	rax, rdx
	sal	rax, 2
	add	rax, rcx
	mov	QWORD PTR -8[rbp], rax
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	add	rax, rdx
	cmp	QWORD PTR -8[rbp], rax
	jb	.L57
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	neg	rax
	add	QWORD PTR -8[rbp], rax
.L57:
	mov	eax, DWORD PTR -24[rbp]
	mov	DWORD PTR -16[rbp], eax
	jmp	.L58
.L60:
	mov	rax, QWORD PTR -8[rbp]
	lea	rdx, 4[rax]
	mov	QWORD PTR -8[rbp], rdx
	mov	edx, DWORD PTR [rax]
	or	edx, DWORD PTR -12[rbp]
	mov	DWORD PTR [rax], edx
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	add	rax, rdx
	cmp	QWORD PTR -8[rbp], rax
	jb	.L59
	mov	rax, QWORD PTR turnoff_mask[rip]
	mov	QWORD PTR -8[rbp], rax
.L59:
	add	DWORD PTR -16[rbp], 1
.L58:
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -16[rbp], eax
	jl	.L60
.L56:
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	lea	rcx, 0[0+rax*4]
	lea	rdx, servowidth[rip]
	mov	eax, DWORD PTR -24[rbp]
	mov	DWORD PTR [rcx+rdx], eax
	cmp	DWORD PTR -24[rbp], 0
	jne	.L61
	mov	rdx, QWORD PTR turnon_mask[rip]
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	DWORD PTR [rax], 0
	jmp	.L62
.L61:
	mov	rdx, QWORD PTR turnon_mask[rip]
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	sal	rax, 2
	add	rdx, rax
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR [rdx], eax
.L62:
	mov	eax, DWORD PTR -20[rbp]
	mov	edi, eax
	call	update_idle_time
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	set_servo, .-set_servo
	.section	.rodata
	.align 8
.LC8:
	.string	"servod: Failed to malloc page_map: %m\n"
.LC9:
	.string	"/proc/%d/pagemap"
	.align 8
.LC10:
	.string	"servod: Failed to open %s: %m\n"
	.align 8
.LC11:
	.string	"servod: Failed to seek on %s: %m\n"
	.align 8
.LC12:
	.string	"servod: Failed to read %s: %m\n"
	.align 8
.LC13:
	.string	"servod: Page %d not present (pfn 0x%016llx)\n"
	.align 8
.LC14:
	.string	"Failed to create uncached map of page %d at %p\n"
	.text
	.type	make_pagemap, @function
make_pagemap:
.LFB19:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 112
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	eax, DWORD PTR num_pages[rip]
	cdqe
	sal	rax, 2
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR page_map[rip], rax
	mov	rax, QWORD PTR page_map[rip]
	test	rax, rax
	jne	.L64
	lea	rdi, .LC8[rip]
	mov	eax, 0
	call	fatal
.L64:
	mov	esi, 2
	lea	rdi, .LC5[rip]
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -100[rbp], eax
	cmp	DWORD PTR -100[rbp], 0
	jns	.L65
	lea	rdi, .LC6[rip]
	mov	eax, 0
	call	fatal
.L65:
	call	getpid@PLT
	mov	DWORD PTR -96[rbp], eax
	mov	edx, DWORD PTR -96[rbp]
	lea	rax, -80[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	sprintf@PLT
	lea	rax, -80[rbp]
	mov	esi, 0
	mov	rdi, rax
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -92[rbp], eax
	cmp	DWORD PTR -92[rbp], 0
	jns	.L66
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC10[rip]
	mov	eax, 0
	call	fatal
.L66:
	mov	rax, QWORD PTR virtcached[rip]
	shr	eax, 9
	mov	ecx, eax
	mov	eax, DWORD PTR -92[rbp]
	mov	edx, 0
	mov	rsi, rcx
	mov	edi, eax
	call	lseek@PLT
	mov	rdx, QWORD PTR virtcached[rip]
	shr	edx, 9
	mov	edx, edx
	cmp	rax, rdx
	je	.L67
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC11[rip]
	mov	eax, 0
	call	fatal
.L67:
	mov	DWORD PTR -104[rbp], 0
	jmp	.L68
.L72:
	lea	rcx, -88[rbp]
	mov	eax, DWORD PTR -92[rbp]
	mov	edx, 8
	mov	rsi, rcx
	mov	edi, eax
	call	read@PLT
	cmp	rax, 8
	je	.L69
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC12[rip]
	mov	eax, 0
	call	fatal
.L69:
	mov	rax, QWORD PTR -88[rbp]
	shr	rax, 55
	and	eax, 447
	cmp	rax, 268
	je	.L70
	mov	rdx, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR -104[rbp]
	mov	esi, eax
	lea	rdi, .LC13[rip]
	mov	eax, 0
	call	fatal
.L70:
	mov	rax, QWORD PTR -88[rbp]
	sal	eax, 12
	mov	edx, eax
	mov	rcx, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -104[rbp]
	cdqe
	sal	rax, 2
	add	rax, rcx
	or	edx, 1073741824
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR -88[rbp]
	sal	eax, 12
	or	eax, 1073741824
	mov	ecx, eax
	mov	rdx, QWORD PTR virtbase[rip]
	mov	eax, DWORD PTR -104[rbp]
	sal	eax, 12
	cdqe
	add	rax, rdx
	mov	edx, DWORD PTR -100[rbp]
	mov	r9, rcx
	mov	r8d, edx
	mov	ecx, 24593
	mov	edx, 3
	mov	esi, 4096
	mov	rdi, rax
	call	mmap@PLT
	mov	rcx, QWORD PTR virtbase[rip]
	mov	edx, DWORD PTR -104[rbp]
	sal	edx, 12
	movsx	rdx, edx
	add	rdx, rcx
	cmp	rax, rdx
	je	.L71
	mov	rdx, QWORD PTR virtbase[rip]
	mov	eax, DWORD PTR -104[rbp]
	sal	eax, 12
	cdqe
	add	rdx, rax
	mov	eax, DWORD PTR -104[rbp]
	mov	esi, eax
	lea	rdi, .LC14[rip]
	mov	eax, 0
	call	fatal
.L71:
	add	DWORD PTR -104[rbp], 1
.L68:
	mov	eax, DWORD PTR num_pages[rip]
	cmp	DWORD PTR -104[rbp], eax
	jl	.L72
	mov	eax, DWORD PTR -92[rbp]
	mov	edi, eax
	call	close@PLT
	mov	eax, DWORD PTR -100[rbp]
	mov	edi, eax
	call	close@PLT
	mov	eax, DWORD PTR num_pages[rip]
	sal	eax, 12
	movsx	rdx, eax
	mov	rax, QWORD PTR virtbase[rip]
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L73
	call	__stack_chk_fail@PLT
.L73:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.size	make_pagemap, .-make_pagemap
	.type	setup_sighandlers, @function
setup_sighandlers:
.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, 176
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -164[rbp], 0
	jmp	.L75
.L76:
	lea	rax, -160[rbp]
	mov	edx, 152
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	lea	rax, terminate[rip]
	mov	QWORD PTR -160[rbp], rax
	lea	rcx, -160[rbp]
	mov	eax, DWORD PTR -164[rbp]
	mov	edx, 0
	mov	rsi, rcx
	mov	edi, eax
	call	sigaction@PLT
	add	DWORD PTR -164[rbp], 1
.L75:
	cmp	DWORD PTR -164[rbp], 63
	jle	.L76
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L77
	call	__stack_chk_fail@PLT
.L77:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE20:
	.size	setup_sighandlers, .-setup_sighandlers
	.type	init_ctrl_data, @function
init_ctrl_data:
.LFB21:
	.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	rax, QWORD PTR cb_base[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	DWORD PTR -20[rbp], 0
	mov	DWORD PTR -16[rbp], 0
	mov	DWORD PTR -12[rbp], 0
	mov	eax, DWORD PTR invert[rip]
	test	eax, eax
	je	.L79
	mov	DWORD PTR -36[rbp], 2116026396
	mov	DWORD PTR -32[rbp], 2116026408
	jmp	.L80
.L79:
	mov	DWORD PTR -36[rbp], 2116026408
	mov	DWORD PTR -32[rbp], 2116026396
.L80:
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L81
	mov	DWORD PTR -44[rbp], 2116075544
	mov	DWORD PTR -40[rbp], 67436616
	jmp	.L82
.L81:
	mov	DWORD PTR -44[rbp], 2116038660
	mov	DWORD PTR -40[rbp], 67240008
.L82:
	mov	rax, QWORD PTR turnon_mask[rip]
	mov	edx, 128
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	mov	DWORD PTR -28[rbp], 0
	jmp	.L83
.L85:
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	DWORD PTR [rdx+rax], 0
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L84
	add	DWORD PTR -20[rbp], 1
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -12[rbp], eax
.L84:
	add	DWORD PTR -28[rbp], 1
.L83:
	cmp	DWORD PTR -28[rbp], 31
	jle	.L85
	mov	DWORD PTR -24[rbp], 0
	jmp	.L86
.L87:
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR -24[rbp]
	cdqe
	sal	rax, 2
	add	rdx, rax
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR [rdx], eax
	add	DWORD PTR -24[rbp], 1
.L86:
	mov	eax, DWORD PTR num_samples[rip]
	cmp	DWORD PTR -24[rbp], eax
	jl	.L87
	mov	DWORD PTR -28[rbp], 0
	jmp	.L88
.L90:
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L89
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rcx, 0[0+rax*4]
	lea	rdx, servostart[rip]
	mov	eax, DWORD PTR -16[rbp]
	mov	DWORD PTR [rcx+rdx], eax
	mov	eax, DWORD PTR num_samples[rip]
	mov	esi, DWORD PTR num_servos[rip]
	cdq
	idiv	esi
	add	DWORD PTR -16[rbp], eax
.L89:
	add	DWORD PTR -28[rbp], 1
.L88:
	cmp	DWORD PTR -28[rbp], 31
	jle	.L90
	mov	DWORD PTR -28[rbp], 0
	jmp	.L91
.L93:
	add	DWORD PTR -28[rbp], 1
.L91:
	cmp	DWORD PTR -28[rbp], 31
	jg	.L92
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L93
.L92:
	mov	DWORD PTR -24[rbp], 0
	jmp	.L94
.L98:
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 67108872
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR -24[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 4[rdx], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -36[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 12[rax], 4
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 32
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rdx], eax
	add	QWORD PTR -8[rbp], 32
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servostart[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -24[rbp], eax
	jne	.L95
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 67108872
	mov	rdx, QWORD PTR turnon_mask[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 4[rdx], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -32[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 12[rax], 4
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 32
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rdx], eax
	add	QWORD PTR -8[rbp], 32
	add	DWORD PTR -28[rbp], 1
	jmp	.L96
.L97:
	add	DWORD PTR -28[rbp], 1
.L96:
	cmp	DWORD PTR -28[rbp], 31
	jg	.L95
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L97
.L95:
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -40[rbp]
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR turnoff_mask[rip]
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 4[rdx], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -44[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 12[rax], 4
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 32
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rdx], eax
	add	QWORD PTR -8[rbp], 32
	add	DWORD PTR -24[rbp], 1
.L94:
	mov	eax, DWORD PTR num_samples[rip]
	cmp	DWORD PTR -24[rbp], eax
	jl	.L98
	sub	QWORD PTR -8[rbp], 32
	mov	rax, QWORD PTR cb_base[rip]
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rdx], eax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE21:
	.size	init_ctrl_data, .-init_ctrl_data
	.type	init_hardware, @function
init_hardware:
.LFB22:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 8
	.cfi_offset 3, -24
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L100
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 0
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 160
	mov	DWORD PTR [rax], 1509949446
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 164
	mov	DWORD PTR [rax], 1510973440
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 160
	mov	DWORD PTR [rax], 1509949462
	mov	edi, 100
	call	udelay
	mov	eax, DWORD PTR step_time_us[rip]
	lea	edx, [rax+rax]
	mov	rax, QWORD PTR pwm_reg[rip]
	add	rax, 16
	mov	DWORD PTR [rax], edx
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	add	rax, 8
	mov	DWORD PTR [rax], -2147479793
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 64
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 33
	mov	edi, 10
	call	udelay
	jmp	.L101
.L100:
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	DWORD PTR [rax], 1
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 152
	mov	DWORD PTR [rax], 1509949446
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 156
	mov	DWORD PTR [rax], 1511997440
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 152
	mov	DWORD PTR [rax], 1509949462
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 16
	mov	DWORD PTR [rax], 1073741824
	mov	edi, 100
	call	udelay
	mov	eax, DWORD PTR step_time_us[rip]
	sub	eax, 1
	sal	eax, 10
	mov	edx, eax
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 8
	mov	DWORD PTR [rax], edx
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	edx, 24
	mov	DWORD PTR [rax], edx
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 20
	mov	DWORD PTR [rax], 1073758208
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	dh, 2
	mov	DWORD PTR [rax], edx
	mov	edi, 100
	call	udelay
.L101:
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], -2147483648
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], 6
	mov	rax, QWORD PTR cb_base[rip]
	mov	rdx, QWORD PTR dma_reg[rip]
	lea	rbx, 4[rdx]
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	DWORD PTR [rbx], eax
	mov	rax, QWORD PTR dma_reg[rip]
	add	rax, 32
	mov	DWORD PTR [rax], 7
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], 277348353
	mov	eax, DWORD PTR delay_hw[rip]
	cmp	eax, 1
	jne	.L103
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	edx, 4
	mov	DWORD PTR [rax], edx
.L103:
	nop
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE22:
	.size	init_hardware, .-init_hardware
	.section	.rodata
.LC15:
	.string	"---------------------------"
.LC16:
	.string	"Servo  Start  Width  TurnOn"
.LC17:
	.string	"%3d: %6d %6d %6d\n"
.LC18:
	.string	"\nData:"
.LC19:
	.string	"@%5d: %08x\n"
	.text
	.type	do_debug, @function
do_debug:
.LFB23:
	.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	DWORD PTR -12[rbp], 0
	mov	DWORD PTR -8[rbp], -1
	lea	rdi, .LC15[rip]
	call	puts@PLT
	lea	rdi, .LC16[rip]
	call	puts@PLT
	mov	DWORD PTR -16[rbp], 0
	jmp	.L105
.L107:
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L106
	mov	rdx, QWORD PTR turnon_mask[rip]
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	setne	al
	movzx	esi, al
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	ecx, DWORD PTR [rdx+rax]
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servostart[rip]
	mov	edx, DWORD PTR [rdx+rax]
	mov	eax, DWORD PTR -16[rbp]
	mov	r8d, esi
	mov	esi, eax
	lea	rdi, .LC17[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -12[rbp], eax
.L106:
	add	DWORD PTR -16[rbp], 1
.L105:
	cmp	DWORD PTR -16[rbp], 31
	jle	.L107
	lea	rdi, .LC18[rip]
	call	puts@PLT
	mov	DWORD PTR -16[rbp], 0
	jmp	.L108
.L110:
	mov	rdx, QWORD PTR turnoff_mask[rip]
	mov	eax, DWORD PTR -16[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	and	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR -4[rbp], eax
	mov	eax, DWORD PTR -4[rbp]
	cmp	eax, DWORD PTR -8[rbp]
	je	.L109
	mov	edx, DWORD PTR -4[rbp]
	mov	eax, DWORD PTR -16[rbp]
	mov	esi, eax
	lea	rdi, .LC19[rip]
	mov	eax, 0
	call	printf@PLT
.L109:
	mov	eax, DWORD PTR -4[rbp]
	mov	DWORD PTR -8[rbp], eax
	add	DWORD PTR -16[rbp], 1
.L108:
	mov	eax, DWORD PTR num_samples[rip]
	cmp	DWORD PTR -16[rbp], eax
	jl	.L110
	lea	rdi, .LC15[rip]
	call	puts@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE23:
	.size	do_debug, .-do_debug
	.section	.rodata
.LC20:
	.string	"us"
.LC21:
	.string	"%"
	.text
	.type	parse_width, @function
parse_width:
.LFB24:
	.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	DWORD PTR -36[rbp], edi
	mov	QWORD PTR -48[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 45
	je	.L112
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 43
	jne	.L113
.L112:
	add	QWORD PTR -24[rbp], 1
.L113:
	mov	rax, QWORD PTR -24[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L114
	mov	rax, QWORD PTR -24[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jle	.L115
.L114:
	mov	eax, -1
	jmp	.L129
.L115:
	lea	rdx, -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	strtod@PLT
	movq	rax, xmm0
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L117
	mov	rax, QWORD PTR -32[rbp]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L118
	mov	eax, DWORD PTR step_time_us[rip]
	pxor	xmm1, xmm1
	cvtsi2sd	xmm1, eax
	movsd	xmm0, QWORD PTR -16[rbp]
	divsd	xmm0, xmm1
	movsd	QWORD PTR -16[rbp], xmm0
	jmp	.L117
.L118:
	mov	rax, QWORD PTR -32[rbp]
	lea	rsi, .LC21[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L119
	mov	eax, DWORD PTR servo_max_ticks[rip]
	mov	edx, DWORD PTR servo_min_ticks[rip]
	sub	eax, edx
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	mulsd	xmm0, QWORD PTR -16[rbp]
	movsd	xmm2, QWORD PTR .LC22[rip]
	movapd	xmm1, xmm0
	divsd	xmm1, xmm2
	mov	eax, DWORD PTR servo_min_ticks[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	addsd	xmm0, xmm1
	movsd	QWORD PTR -16[rbp], xmm0
	jmp	.L117
.L119:
	mov	eax, -1
	jmp	.L129
.L117:
	mov	rax, QWORD PTR -16[rbp]
	movq	xmm0, rax
	call	floor@PLT
	movq	rax, xmm0
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 43
	jne	.L120
	mov	eax, DWORD PTR -36[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	movsd	xmm1, QWORD PTR -16[rbp]
	addsd	xmm0, xmm1
	movsd	QWORD PTR -16[rbp], xmm0
	mov	eax, DWORD PTR servo_max_ticks[rip]
	pxor	xmm1, xmm1
	cvtsi2sd	xmm1, eax
	movsd	xmm0, QWORD PTR -16[rbp]
	comisd	xmm0, xmm1
	jbe	.L121
	mov	eax, DWORD PTR servo_max_ticks[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	movsd	QWORD PTR -16[rbp], xmm0
	jmp	.L121
.L120:
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 45
	jne	.L121
	mov	eax, DWORD PTR -36[rbp]
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, servowidth[rip]
	mov	eax, DWORD PTR [rdx+rax]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	subsd	xmm0, QWORD PTR -16[rbp]
	movsd	QWORD PTR -16[rbp], xmm0
	mov	eax, DWORD PTR servo_min_ticks[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	comisd	xmm0, QWORD PTR -16[rbp]
	jbe	.L121
	mov	eax, DWORD PTR servo_min_ticks[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	movsd	QWORD PTR -16[rbp], xmm0
.L121:
	pxor	xmm0, xmm0
	ucomisd	xmm0, QWORD PTR -16[rbp]
	jp	.L124
	pxor	xmm0, xmm0
	ucomisd	xmm0, QWORD PTR -16[rbp]
	jne	.L124
	movsd	xmm0, QWORD PTR -16[rbp]
	cvttsd2si	eax, xmm0
	jmp	.L129
.L124:
	mov	eax, DWORD PTR servo_min_ticks[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	comisd	xmm0, QWORD PTR -16[rbp]
	ja	.L126
	mov	eax, DWORD PTR servo_max_ticks[rip]
	pxor	xmm1, xmm1
	cvtsi2sd	xmm1, eax
	movsd	xmm0, QWORD PTR -16[rbp]
	comisd	xmm0, xmm1
	jbe	.L134
.L126:
	mov	eax, -1
	jmp	.L129
.L134:
	movsd	xmm0, QWORD PTR -16[rbp]
	cvttsd2si	eax, xmm0
.L129:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L130
	call	__stack_chk_fail@PLT
.L130:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE24:
	.size	parse_width, .-parse_width
	.section	.rodata
.LC24:
	.string	"%d-%d=%s"
.LC25:
	.string	"Bad input: %s"
.LC26:
	.string	"Invalid header P%d\n"
.LC27:
	.string	"Invalid pin number P%d-%d\n"
	.align 8
.LC28:
	.string	"P%d-%d is not mapped to a servo\n"
.LC29:
	.string	"Invalid width specified\n"
.LC30:
	.string	"%d=%s"
.LC31:
	.string	"debug\n"
.LC32:
	.string	"Invalid servo number %d\n"
	.align 8
.LC33:
	.string	"Servo %d is not mapped to a GPIO pin\n"
.LC34:
	.string	"Input too long\n"
	.text
	.type	go_go_go, @function
go_go_go:
.LFB25:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 272
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -252[rbp], 0
	mov	esi, 2050
	lea	rdi, .LC2[rip]
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -248[rbp], eax
	cmp	DWORD PTR -248[rbp], -1
	jne	.L163
	lea	rsi, .LC2[rip]
	lea	rdi, .LC10[rip]
	mov	eax, 0
	call	fatal
.L163:
	mov	eax, 0
	mov	ecx, 16
	lea	rdx, -208[rbp]
	mov	rdi, rdx
#APP
# 786 "the_stack_data/398739.c" 1
	cld; rep; stosq
# 0 "" 2
#NO_APP
	mov	eax, edi
	mov	edx, ecx
	mov	DWORD PTR -244[rbp], edx
	mov	DWORD PTR -240[rbp], eax
	mov	eax, DWORD PTR -248[rbp]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	mov	esi, eax
	movsx	rax, esi
	mov	rdi, QWORD PTR -208[rbp+rax*8]
	mov	eax, DWORD PTR -248[rbp]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	or	rdi, rax
	mov	rdx, rdi
	movsx	rax, esi
	mov	QWORD PTR -208[rbp+rax*8], rdx
	lea	rax, -224[rbp]
	mov	rdi, rax
	call	get_next_idle_timeout
	mov	eax, DWORD PTR -248[rbp]
	lea	edi, 1[rax]
	lea	rdx, -224[rbp]
	lea	rax, -208[rbp]
	mov	r8, rdx
	mov	ecx, 0
	mov	edx, 0
	mov	rsi, rax
	call	select@PLT
	mov	DWORD PTR -236[rbp], eax
	cmp	DWORD PTR -236[rbp], 1
	jne	.L165
	jmp	.L139
.L162:
	mov	eax, DWORD PTR -252[rbp]
	cdqe
	lea	rdx, line.3[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, 10
	jne	.L140
	add	DWORD PTR -252[rbp], 1
	mov	eax, DWORD PTR -252[rbp]
	cdqe
	lea	rdx, line.3[rip]
	mov	BYTE PTR [rax+rdx], 0
	mov	DWORD PTR -252[rbp], 0
	movzx	eax, BYTE PTR line.3[rip]
	cmp	al, 112
	je	.L141
	movzx	eax, BYTE PTR line.3[rip]
	cmp	al, 80
	jne	.L142
.L141:
	lea	rdi, line.3[rip+1]
	lea	rcx, -80[rbp]
	lea	rdx, -256[rbp]
	lea	rax, -260[rbp]
	mov	r8, rcx
	mov	rcx, rdx
	mov	rdx, rax
	lea	rsi, .LC24[rip]
	mov	eax, 0
	call	__isoc99_sscanf@PLT
	mov	DWORD PTR -236[rbp], eax
	cmp	DWORD PTR -236[rbp], 3
	je	.L143
	mov	rax, QWORD PTR stderr[rip]
	lea	rdx, line.3[rip]
	lea	rsi, .LC25[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L139
.L143:
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 1
	je	.L145
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 5
	je	.L145
	mov	edx, DWORD PTR -260[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC26[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L144
.L145:
	mov	eax, DWORD PTR -256[rbp]
	test	eax, eax
	jle	.L146
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 1
	jne	.L147
	mov	eax, DWORD PTR -256[rbp]
	cmp	eax, 26
	jg	.L146
.L147:
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 5
	jne	.L148
	mov	eax, DWORD PTR -256[rbp]
	cmp	eax, 8
	jle	.L148
.L146:
	mov	ecx, DWORD PTR -256[rbp]
	mov	edx, DWORD PTR -260[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC27[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L144
.L148:
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 1
	jne	.L149
	mov	eax, DWORD PTR -256[rbp]
	cdqe
	lea	rdx, p1pin2servo[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L150
.L149:
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 5
	jne	.L151
	mov	eax, DWORD PTR -256[rbp]
	cdqe
	lea	rdx, p5pin2servo[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	jne	.L151
.L150:
	mov	ecx, DWORD PTR -256[rbp]
	mov	edx, DWORD PTR -260[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC28[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L144
.L151:
	mov	eax, DWORD PTR -260[rbp]
	cmp	eax, 1
	jne	.L152
	mov	eax, DWORD PTR -256[rbp]
	cdqe
	lea	rdx, p1pin2servo[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	DWORD PTR -264[rbp], eax
	jmp	.L153
.L152:
	mov	eax, DWORD PTR -256[rbp]
	cdqe
	lea	rdx, p5pin2servo[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	DWORD PTR -264[rbp], eax
.L153:
	mov	eax, DWORD PTR -264[rbp]
	lea	rdx, -80[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	parse_width
	mov	DWORD PTR -228[rbp], eax
	cmp	DWORD PTR -228[rbp], 0
	jns	.L154
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 24
	mov	esi, 1
	lea	rdi, .LC29[rip]
	call	fwrite@PLT
	jmp	.L139
.L154:
	mov	eax, DWORD PTR -264[rbp]
	mov	edx, DWORD PTR -228[rbp]
	mov	esi, edx
	mov	edi, eax
	call	set_servo
	jmp	.L139
.L144:
	jmp	.L139
.L142:
	lea	rdx, -80[rbp]
	lea	rax, -264[rbp]
	mov	rcx, rdx
	mov	rdx, rax
	lea	rsi, .LC30[rip]
	lea	rdi, line.3[rip]
	mov	eax, 0
	call	__isoc99_sscanf@PLT
	mov	DWORD PTR -236[rbp], eax
	lea	rsi, .LC31[rip]
	lea	rdi, line.3[rip]
	call	strcmp@PLT
	test	eax, eax
	jne	.L156
	call	do_debug
	jmp	.L139
.L156:
	cmp	DWORD PTR -236[rbp], 2
	je	.L157
	mov	rax, QWORD PTR stderr[rip]
	lea	rdx, line.3[rip]
	lea	rsi, .LC25[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L139
.L157:
	mov	eax, DWORD PTR -264[rbp]
	test	eax, eax
	js	.L158
	mov	eax, DWORD PTR -264[rbp]
	cmp	eax, 31
	jle	.L159
.L158:
	mov	edx, DWORD PTR -264[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC32[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L139
.L159:
	mov	eax, DWORD PTR -264[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	jne	.L160
	mov	edx, DWORD PTR -264[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC33[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L139
.L160:
	mov	eax, DWORD PTR -264[rbp]
	lea	rdx, -80[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	parse_width
	mov	DWORD PTR -232[rbp], eax
	cmp	DWORD PTR -232[rbp], 0
	jns	.L161
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 24
	mov	esi, 1
	lea	rdi, .LC29[rip]
	call	fwrite@PLT
	jmp	.L139
.L161:
	mov	eax, DWORD PTR -264[rbp]
	mov	edx, DWORD PTR -232[rbp]
	mov	esi, edx
	mov	edi, eax
	call	set_servo
	jmp	.L139
.L140:
	add	DWORD PTR -252[rbp], 1
	cmp	DWORD PTR -252[rbp], 125
	jle	.L139
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 15
	mov	esi, 1
	lea	rdi, .LC34[rip]
	call	fwrite@PLT
	mov	DWORD PTR -252[rbp], 0
.L139:
	mov	eax, DWORD PTR -252[rbp]
	cdqe
	lea	rdx, line.3[rip]
	lea	rcx, [rax+rdx]
	mov	eax, DWORD PTR -248[rbp]
	mov	edx, 1
	mov	rsi, rcx
	mov	edi, eax
	call	read@PLT
	cmp	rax, 1
	je	.L162
	jmp	.L163
.L165:
	nop
	jmp	.L163
	.cfi_endproc
.LFE25:
	.size	go_go_go, .-go_go_go
	.section	.rodata
.LC35:
	.string	"r"
.LC36:
	.string	"/proc/cpuinfo"
	.align 8
.LC37:
	.string	"Unable to open /proc/cpuinfo: %m\n"
.LC38:
	.string	"Revision"
	.align 8
.LC39:
	.string	"servod: No 'Revision' record in /proc/cpuinfo\n"
	.align 8
.LC40:
	.string	"servod: Failed to parse Revision string\n"
	.align 8
.LC41:
	.string	"servod: Invalid board Revision\n"
	.text
	.type	board_rev, @function
board_rev:
.LFB26:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 176
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	eax, DWORD PTR rev.2[rip]
	test	eax, eax
	je	.L167
	mov	eax, DWORD PTR rev.2[rip]
	jmp	.L178
.L167:
	lea	rsi, .LC35[rip]
	lea	rdi, .LC36[rip]
	call	fopen@PLT
	mov	QWORD PTR -168[rbp], rax
	cmp	QWORD PTR -168[rbp], 0
	jne	.L170
	lea	rdi, .LC37[rip]
	mov	eax, 0
	call	fatal
	jmp	.L170
.L172:
	lea	rax, -144[rbp]
	mov	edx, 8
	lea	rsi, .LC38[rip]
	mov	rdi, rax
	call	strncmp@PLT
	test	eax, eax
	je	.L180
.L170:
	mov	rdx, QWORD PTR -168[rbp]
	lea	rax, -144[rbp]
	mov	esi, 128
	mov	rdi, rax
	call	fgets@PLT
	mov	QWORD PTR -160[rbp], rax
	cmp	QWORD PTR -160[rbp], 0
	jne	.L172
	jmp	.L171
.L180:
	nop
.L171:
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	fclose@PLT
	cmp	QWORD PTR -160[rbp], 0
	jne	.L173
	lea	rdi, .LC39[rip]
	mov	eax, 0
	call	fatal
.L173:
	lea	rax, -144[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -3[rax]
	lea	rax, -144[rbp]
	add	rax, rdx
	mov	QWORD PTR -152[rbp], rax
	lea	rcx, -176[rbp]
	mov	rax, QWORD PTR -152[rbp]
	mov	edx, 16
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	DWORD PTR rev.2[rip], eax
	mov	rax, QWORD PTR -152[rbp]
	lea	rdx, 2[rax]
	mov	rax, QWORD PTR -176[rbp]
	cmp	rdx, rax
	je	.L174
	lea	rdi, .LC40[rip]
	mov	eax, 0
	call	fatal
.L174:
	mov	eax, DWORD PTR rev.2[rip]
	test	eax, eax
	jg	.L175
	lea	rdi, .LC41[rip]
	mov	eax, 0
	call	fatal
	jmp	.L176
.L175:
	mov	eax, DWORD PTR rev.2[rip]
	cmp	eax, 3
	jg	.L177
	mov	DWORD PTR rev.2[rip], 1
	jmp	.L176
.L177:
	mov	DWORD PTR rev.2[rip], 2
.L176:
	mov	eax, DWORD PTR rev.2[rip]
.L178:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L179
	call	__stack_chk_fail@PLT
.L179:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE26:
	.size	board_rev, .-board_rev
	.section	.rodata
.LC42:
	.string	"P1"
.LC43:
	.string	"P5"
	.align 8
.LC44:
	.string	"Invalid character '%c' in %s pin list\n"
	.align 8
.LC45:
	.string	"Invalid pin number %d in %s pin list\n"
.LC46:
	.string	"Too many servos specified\n"
	.align 8
.LC47:
	.string	"Pin %d on header %s cannot be used for a servo output\n"
.LC48:
	.string	"w"
.LC49:
	.string	"p1pins=%s\np5pins=%s\n"
.LC50:
	.string	"p5pins=%s\np1pins=%s\n"
.LC51:
	.string	"\nServo mapping:\n"
	.align 8
.LC52:
	.string	"    %2d on %-5s          GPIO-%d\n"
	.text
	.type	parse_pin_lists, @function
parse_pin_lists:
.LFB27:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 120
	.cfi_offset 3, -24
	mov	DWORD PTR -100[rbp], edi
	mov	QWORD PTR -112[rbp], rsi
	mov	QWORD PTR -120[rbp], rdx
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -24[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -84[rbp], 0
	mov	edx, 32
	mov	esi, 255
	lea	rdi, servo2gpio[rip]
	call	memset@PLT
	mov	edx, 27
	mov	esi, 255
	lea	rdi, p1pin2servo[rip]
	call	memset@PLT
	mov	edx, 9
	mov	esi, 255
	lea	rdi, p5pin2servo[rip]
	call	memset@PLT
	mov	DWORD PTR -88[rbp], 0
	jmp	.L182
.L200:
	cmp	DWORD PTR -88[rbp], 0
	jne	.L183
	cmp	DWORD PTR -100[rbp], 0
	je	.L183
	lea	rax, .LC42[rip]
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR -64[rbp], rax
	call	board_rev
	cmp	eax, 1
	jne	.L184
	lea	rax, rev1_p1pin2gpio_map[rip]
	mov	QWORD PTR -56[rbp], rax
	mov	DWORD PTR -92[rbp], 26
	jmp	.L185
.L184:
	lea	rax, rev2_p1pin2gpio_map[rip]
	mov	QWORD PTR -56[rbp], rax
	mov	DWORD PTR -92[rbp], 26
.L185:
	lea	rax, p1pin2servo[rip]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L186
.L183:
	lea	rax, .LC43[rip]
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	QWORD PTR -64[rbp], rax
	call	board_rev
	cmp	eax, 1
	jne	.L187
	lea	rax, rev1_p5pin2gpio_map[rip]
	mov	QWORD PTR -56[rbp], rax
	mov	DWORD PTR -92[rbp], 8
	jmp	.L188
.L187:
	lea	rax, rev2_p5pin2gpio_map[rip]
	mov	QWORD PTR -56[rbp], rax
	mov	DWORD PTR -92[rbp], 8
.L188:
	lea	rax, p5pin2servo[rip]
	mov	QWORD PTR -48[rbp], rax
.L186:
	jmp	.L189
.L199:
	lea	rcx, -80[rbp]
	mov	rax, QWORD PTR -64[rbp]
	mov	edx, 0
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L190
	mov	rax, QWORD PTR -80[rbp]
	cmp	QWORD PTR -64[rbp], rax
	je	.L191
	mov	rax, QWORD PTR -80[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 44
	je	.L190
.L191:
	mov	rax, QWORD PTR -80[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	eax, al
	mov	rdx, QWORD PTR -72[rbp]
	mov	esi, eax
	lea	rdi, .LC44[rip]
	mov	eax, 0
	call	fatal
.L190:
	cmp	QWORD PTR -32[rbp], 0
	js	.L192
	mov	eax, DWORD PTR -92[rbp]
	cdqe
	cmp	QWORD PTR -32[rbp], rax
	jle	.L193
.L192:
	mov	rdx, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	lea	rdi, .LC45[rip]
	mov	eax, 0
	call	fatal
.L193:
	cmp	DWORD PTR -84[rbp], 32
	jne	.L194
	lea	rdi, .LC46[rip]
	mov	eax, 0
	call	fatal
.L194:
	cmp	QWORD PTR -32[rbp], 0
	jne	.L195
	add	DWORD PTR -84[rbp], 1
	jmp	.L196
.L195:
	mov	rax, QWORD PTR -32[rbp]
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -56[rbp]
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	cmp	al, -1
	jne	.L197
	mov	rdx, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	lea	rdi, .LC47[rip]
	mov	eax, 0
	call	fatal
.L197:
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -48[rbp]
	add	rax, rdx
	mov	edx, DWORD PTR -84[rbp]
	mov	BYTE PTR [rax], dl
	mov	rax, QWORD PTR -32[rbp]
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -56[rbp]
	lea	rcx, [rdx+rax]
	mov	eax, DWORD PTR -84[rbp]
	lea	edx, 1[rax]
	mov	DWORD PTR -84[rbp], edx
	movzx	edx, BYTE PTR [rcx]
	cdqe
	lea	rcx, servo2gpio[rip]
	mov	BYTE PTR [rax+rcx], dl
	mov	eax, DWORD PTR num_servos[rip]
	add	eax, 1
	mov	DWORD PTR num_servos[rip], eax
.L196:
	mov	rax, QWORD PTR -80[rbp]
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 44
	jne	.L189
	add	QWORD PTR -64[rbp], 1
.L189:
	mov	rax, QWORD PTR -64[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	jne	.L199
	add	DWORD PTR -88[rbp], 1
.L182:
	cmp	DWORD PTR -88[rbp], 1
	jle	.L200
	lea	rsi, .LC48[rip]
	lea	rdi, .LC3[rip]
	call	fopen@PLT
	mov	QWORD PTR -40[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	je	.L209
	cmp	DWORD PTR -100[rbp], 0
	je	.L202
	mov	rcx, QWORD PTR -120[rbp]
	mov	rdx, QWORD PTR -112[rbp]
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC49[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L203
.L202:
	mov	rcx, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -120[rbp]
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC50[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
.L203:
	mov	rax, QWORD PTR -40[rbp]
	mov	rcx, rax
	mov	edx, 16
	mov	esi, 1
	lea	rdi, .LC51[rip]
	call	fwrite@PLT
	mov	DWORD PTR -96[rbp], 0
	jmp	.L204
.L207:
	mov	eax, DWORD PTR -96[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L210
	mov	eax, DWORD PTR -96[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	ebx, al
	mov	eax, DWORD PTR -96[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edi, eax
	call	gpio2pinname
	mov	rcx, rax
	mov	edx, DWORD PTR -96[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	r8d, ebx
	lea	rsi, .LC52[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L206
.L210:
	nop
.L206:
	add	DWORD PTR -96[rbp], 1
.L204:
	cmp	DWORD PTR -96[rbp], 31
	jle	.L207
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	fclose@PLT
.L209:
	nop
	mov	rax, QWORD PTR -24[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L208
	call	__stack_chk_fail@PLT
.L208:
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE27:
	.size	parse_pin_lists, .-parse_pin_lists
	.type	gpiosearch, @function
gpiosearch:
.LFB28:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	eax, edi
	mov	QWORD PTR -16[rbp], rsi
	mov	DWORD PTR -8[rbp], edx
	mov	BYTE PTR -4[rbp], al
	jmp	.L212
.L214:
	mov	eax, DWORD PTR -8[rbp]
	movsx	rdx, eax
	mov	rax, QWORD PTR -16[rbp]
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	cmp	BYTE PTR -4[rbp], al
	jne	.L212
	mov	eax, DWORD PTR -8[rbp]
	add	eax, 1
	jmp	.L213
.L212:
	sub	DWORD PTR -8[rbp], 1
	cmp	DWORD PTR -8[rbp], 0
	jne	.L214
	mov	eax, 0
.L213:
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE28:
	.size	gpiosearch, .-gpiosearch
	.section	.rodata
.LC53:
	.string	"P1-%d"
.LC54:
	.string	"P5-%d"
	.align 8
.LC55:
	.string	"Cannot map GPIO %d to a header pin\n"
	.text
	.type	gpio2pinname, @function
gpio2pinname:
.LFB29:
	.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	eax, edi
	mov	BYTE PTR -20[rbp], al
	call	board_rev
	cmp	eax, 1
	jne	.L216
	movzx	eax, BYTE PTR -20[rbp]
	mov	edx, 26
	lea	rsi, rev1_p1pin2gpio_map[rip]
	mov	edi, eax
	call	gpiosearch
	mov	BYTE PTR -1[rbp], al
	cmp	BYTE PTR -1[rbp], 0
	je	.L217
	movzx	eax, BYTE PTR -1[rbp]
	mov	edx, eax
	lea	rsi, .LC53[rip]
	lea	rdi, res.1[rip]
	mov	eax, 0
	call	sprintf@PLT
	jmp	.L218
.L217:
	movzx	eax, BYTE PTR -20[rbp]
	mov	edx, 8
	lea	rsi, rev1_p5pin2gpio_map[rip]
	mov	edi, eax
	call	gpiosearch
	mov	BYTE PTR -1[rbp], al
	cmp	BYTE PTR -1[rbp], 0
	je	.L219
	movzx	eax, BYTE PTR -1[rbp]
	mov	edx, eax
	lea	rsi, .LC54[rip]
	lea	rdi, res.1[rip]
	mov	eax, 0
	call	sprintf@PLT
	jmp	.L218
.L219:
	movzx	eax, BYTE PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC55[rip]
	mov	eax, 0
	call	fatal
	jmp	.L218
.L216:
	movzx	eax, BYTE PTR -20[rbp]
	mov	edx, 26
	lea	rsi, rev2_p1pin2gpio_map[rip]
	mov	edi, eax
	call	gpiosearch
	mov	BYTE PTR -1[rbp], al
	cmp	BYTE PTR -1[rbp], 0
	je	.L220
	movzx	eax, BYTE PTR -1[rbp]
	mov	edx, eax
	lea	rsi, .LC53[rip]
	lea	rdi, res.1[rip]
	mov	eax, 0
	call	sprintf@PLT
	jmp	.L218
.L220:
	movzx	eax, BYTE PTR -20[rbp]
	mov	edx, 8
	lea	rsi, rev2_p5pin2gpio_map[rip]
	mov	edi, eax
	call	gpiosearch
	mov	BYTE PTR -1[rbp], al
	cmp	BYTE PTR -1[rbp], 0
	je	.L221
	movzx	eax, BYTE PTR -1[rbp]
	mov	edx, eax
	lea	rsi, .LC54[rip]
	lea	rdi, res.1[rip]
	mov	eax, 0
	call	sprintf@PLT
	jmp	.L218
.L221:
	movzx	eax, BYTE PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC55[rip]
	mov	eax, 0
	call	fatal
.L218:
	lea	rax, res.1[rip]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE29:
	.size	gpio2pinname, .-gpio2pinname
	.section	.rodata
.LC56:
	.string	"Invalid %s value specified\n"
	.align 8
.LC57:
	.string	"%s value is not a multiple of step-time\n"
	.align 8
.LC58:
	.string	"%s value must be between 0% and 100% inclusive\n"
	.text
	.type	parse_min_max_arg, @function
parse_min_max_arg:
.LFB30:
	.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
	mov	QWORD PTR -48[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rdx, -24[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	strtod@PLT
	movq	rax, xmm0
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L224
	mov	rax, QWORD PTR -40[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jg	.L224
	pxor	xmm0, xmm0
	comisd	xmm0, QWORD PTR -16[rbp]
	jbe	.L244
.L224:
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC56[rip]
	mov	eax, 0
	call	fatal
	jmp	.L227
.L244:
	mov	rax, QWORD PTR -24[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	jne	.L228
	mov	rax, QWORD PTR -16[rbp]
	movq	xmm0, rax
	call	floor@PLT
	movq	rax, xmm0
	movq	xmm2, rax
	ucomisd	xmm2, QWORD PTR -16[rbp]
	jp	.L242
	movq	xmm3, rax
	comisd	xmm3, QWORD PTR -16[rbp]
	je	.L229
.L242:
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC56[rip]
	mov	eax, 0
	call	fatal
.L229:
	movsd	xmm0, QWORD PTR -16[rbp]
	cvttsd2si	eax, xmm0
	jmp	.L240
.L228:
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L232
	mov	rax, QWORD PTR -16[rbp]
	movq	xmm0, rax
	call	floor@PLT
	movq	rax, xmm0
	movq	xmm4, rax
	ucomisd	xmm4, QWORD PTR -16[rbp]
	jp	.L243
	movq	xmm5, rax
	comisd	xmm5, QWORD PTR -16[rbp]
	je	.L233
.L243:
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC56[rip]
	mov	eax, 0
	call	fatal
.L233:
	movsd	xmm0, QWORD PTR -16[rbp]
	cvttsd2si	eax, xmm0
	mov	ecx, DWORD PTR step_time_us[rip]
	cdq
	idiv	ecx
	mov	eax, edx
	test	eax, eax
	je	.L235
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC57[rip]
	mov	eax, 0
	call	fatal
.L235:
	mov	eax, DWORD PTR step_time_us[rip]
	pxor	xmm1, xmm1
	cvtsi2sd	xmm1, eax
	movsd	xmm0, QWORD PTR -16[rbp]
	divsd	xmm0, xmm1
	cvttsd2si	eax, xmm0
	jmp	.L240
.L232:
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC21[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L236
	pxor	xmm0, xmm0
	comisd	xmm0, QWORD PTR -16[rbp]
	ja	.L237
	movsd	xmm0, QWORD PTR -16[rbp]
	comisd	xmm0, QWORD PTR .LC22[rip]
	jbe	.L238
.L237:
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC58[rip]
	mov	eax, 0
	call	fatal
.L238:
	mov	eax, DWORD PTR cycle_time_us[rip]
	pxor	xmm0, xmm0
	cvtsi2sd	xmm0, eax
	mulsd	xmm0, QWORD PTR -16[rbp]
	movsd	xmm1, QWORD PTR .LC22[rip]
	divsd	xmm0, xmm1
	mov	eax, DWORD PTR step_time_us[rip]
	pxor	xmm1, xmm1
	cvtsi2sd	xmm1, eax
	divsd	xmm0, xmm1
	cvttsd2si	eax, xmm0
	jmp	.L240
.L236:
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rax
	lea	rdi, .LC56[rip]
	mov	eax, 0
	call	fatal
.L227:
	mov	eax, -1
.L240:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L241
	call	__stack_chk_fail@PLT
.L241:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE30:
	.size	parse_min_max_arg, .-parse_min_max_arg
	.section	.rodata
.LC59:
	.string	"mxhnt:15icsfd"
	.align 8
.LC60:
	.ascii	"\nUsage: %s <options>\n\nOptions:\n  --pcm               tel"
	.ascii	"ls servod to use PCM rather than PWM hardware\n             "
	.ascii	"         to implement delays\n  --idle-timeout=Nms  tells se"
	.ascii	"rvod to stop sending servo pulses for a\n                   "
	.ascii	"   given output N milliseconds after the last update\n  --cy"
	.ascii	"cle-time=Nus    Control pulse cycle time in microseconds, de"
	.ascii	"fault\n                      %dus\n  --step-size=Nus     Pul"
	.ascii	"se width increment step size in microseconds,\n             "
	.ascii	"         default %dus\n  --min={N|Nus|N%%}    specifies the "
	.ascii	"minimum allowed pulse width, default\n                      "
	.ascii	"%d steps or %dus\n  --max={N|Nus|N%%}    specifies the maxim"
	.ascii	"um allowed pulse width, default\n                      %d st"
	.ascii	"eps or %dus\n  --invert            Inverts outputs\n  --dma-"
	.ascii	"chan=N        tells servod which dma channel to use, default"
	.ascii	" %d\n  --p1pins=<list>     tells servod which pins on the P1"
	.ascii	" header to use\n  --p5pins=<list>     tells servod which pin"
	.ascii	"s on the P5 header to use\n\nwhere <list> defaults to \"%s\""
	.ascii	" for p1pins and\n\"%s\" for p5pins.  p5pins is only valid on"
	.ascii	" rev 2 boards.\n\nmin and max values can be specified in uni"
	.ascii	"ts of steps, in microseconds,\nor as a percentage of the cyc"
	.ascii	"le time.  So, for example, if cycle time is\n20000us and ste"
	.ascii	"p size is 10us then the following are equivalent:\n\n       "
	.ascii	"   --min=50   --min=500us    --min=2.5%%\n\nFor the default "
	.ascii	"configuration, example commands to set the first servo\nto t"
	.ascii	"he mid position would be any of:\n\n  echo 0=150 > /dev/serv"
	.ascii	"oblaster        # Specify as a number of steps\n  echo 0=50%"
	.ascii	"% > /dev/servoblaster        # Specify as a percentage\n  ec"
	.ascii	"ho 0=1500us > /dev/servoblaster     # Specify as microsecond"
	.ascii	"s\n  echo P1-7=150 > /dev/servoblaster     # Using P1 pin nu"
	.ascii	"mber rather\n  echo P1-7=50%% > /dev/servoblaster     # ... "
	.ascii	"than servo number\n  echo P1-7=1500us > /dev/servoblaster\n\n"
	.ascii	"Servo adjustments may also be specified relative to the curr"
	.ascii	"ent\nposition by adding a '+' or '-' prefix to the width as "
	.ascii	"follows:\n\n  echo 0=+10 > /dev/servoblaster\n  echo 0=-20 >"
	.ascii	" /dev/s"
	.string	"ervoblaster\n\n"
.LC61:
	.string	"Invalid parameter\n"
	.align 8
.LC62:
	.string	"Board rev 1 does not have a P5 header\n"
.LC63:
	.string	"Invalid dma-chan specified\n"
.LC64:
	.string	"ms"
	.align 8
.LC65:
	.string	"Invalid idle-timeout specified\n"
.LC66:
	.string	"Invalid cycle-time specified\n"
.LC67:
	.string	"Invalid step-size specified\n"
	.align 8
.LC68:
	.string	"cycle-time is not a multiple of step-size\n"
	.align 8
.LC69:
	.string	"cycle-time must be at least 100 * step-size\n"
.LC70:
	.string	"min"
.LC71:
	.string	"max"
	.align 8
.LC72:
	.string	"Using too much memory; reduce cycle-time or increase step-size\n"
	.align 8
.LC73:
	.string	"max value is larger than cycle time\n"
.LC74:
	.string	"min value is >= max value\n"
	.align 8
.LC75:
	.string	"\nBoard revision:            %7d\n"
.LC76:
	.string	"PWM"
.LC77:
	.string	"PCM"
	.align 8
.LC78:
	.string	"Using hardware:                %s\n"
	.align 8
.LC79:
	.string	"Using DMA channel:         %7d\n"
	.align 8
.LC80:
	.string	"Idle timeout:              %7dms\n"
	.align 8
.LC81:
	.string	"Idle timeout:             Disabled"
	.align 8
.LC82:
	.string	"Number of servos:          %7d\n"
	.align 8
.LC83:
	.string	"Servo cycle time:          %7dus\n"
	.align 8
.LC84:
	.string	"Pulse increment step size: %7dus\n"
	.align 8
.LC85:
	.string	"Minimum width value:       %7d (%dus)\n"
	.align 8
.LC86:
	.string	"Maximum width value:       %7d (%dus)\n"
.LC87:
	.string	"Inverted"
.LC88:
	.string	"  Normal"
.LC89:
	.string	"Output levels:            %s\n"
	.align 8
.LC90:
	.string	"\nUsing P1 pins:               %s\n"
	.align 8
.LC91:
	.string	"Using P5 pins:               %s\n"
.LC92:
	.string	"\nServo mapping:"
	.align 8
.LC93:
	.string	"servod: Failed to mmap for cached pages: %m\n"
	.align 8
.LC94:
	.string	"servod: Virtual address is not page aligned\n"
	.align 8
.LC95:
	.string	"servod: Failed to mmap uncached pages: %m\n"
	.align 8
.LC96:
	.string	"servod: Failed to create %s: %m\n"
	.align 8
.LC97:
	.string	"servod: Failed to set permissions on %s: %m\n"
	.align 8
.LC98:
	.string	"servod: Failed to daemonize process: %m\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB31:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 136
	.cfi_offset 3, -24
	mov	DWORD PTR -132[rbp], edi
	mov	QWORD PTR -144[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -24[rbp], rax
	xor	eax, eax
	mov	rax, QWORD PTR default_p1_pins[rip]
	mov	QWORD PTR -88[rbp], rax
	mov	rax, QWORD PTR default_p5_pins[rip]
	mov	QWORD PTR -80[rbp], rax
	mov	DWORD PTR -116[rbp], 1
	mov	DWORD PTR -112[rbp], 0
	mov	DWORD PTR -108[rbp], 0
	mov	QWORD PTR -72[rbp], 0
	mov	QWORD PTR -64[rbp], 0
	mov	QWORD PTR -56[rbp], 0
	mov	QWORD PTR -48[rbp], 0
	mov	QWORD PTR -40[rbp], 0
	mov	QWORD PTR -32[rbp], 0
	mov	DWORD PTR -104[rbp], 1
	mov	rax, QWORD PTR stdout[rip]
	mov	ecx, 0
	mov	edx, 1
	mov	esi, 0
	mov	rdi, rax
	call	setvbuf@PLT
.L262:
	lea	rdx, -96[rbp]
	mov	rsi, QWORD PTR -144[rbp]
	mov	eax, DWORD PTR -132[rbp]
	mov	r8, rdx
	lea	rcx, long_options.0[rip]
	lea	rdx, .LC59[rip]
	mov	edi, eax
	call	getopt_long@PLT
	mov	DWORD PTR -100[rbp], eax
	cmp	DWORD PTR -100[rbp], -1
	jne	.L246
	call	board_rev
	cmp	eax, 1
	je	.L247
	jmp	.L248
.L246:
	cmp	DWORD PTR -100[rbp], 100
	jne	.L249
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -32[rbp], rax
	jmp	.L262
.L249:
	cmp	DWORD PTR -100[rbp], 102
	jne	.L251
	mov	DWORD PTR -104[rbp], 0
	jmp	.L262
.L251:
	cmp	DWORD PTR -100[rbp], 112
	jne	.L252
	mov	DWORD PTR delay_hw[rip], 1
	jmp	.L262
.L252:
	cmp	DWORD PTR -100[rbp], 116
	jne	.L253
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L262
.L253:
	cmp	DWORD PTR -100[rbp], 99
	jne	.L254
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L262
.L254:
	cmp	DWORD PTR -100[rbp], 115
	jne	.L255
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L262
.L255:
	cmp	DWORD PTR -100[rbp], 109
	jne	.L256
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -72[rbp], rax
	jmp	.L262
.L256:
	cmp	DWORD PTR -100[rbp], 120
	jne	.L257
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -64[rbp], rax
	jmp	.L262
.L257:
	cmp	DWORD PTR -100[rbp], 105
	jne	.L258
	mov	DWORD PTR invert[rip], 1
	jmp	.L262
.L258:
	cmp	DWORD PTR -100[rbp], 104
	jne	.L259
	mov	rcx, QWORD PTR default_p5_pins[rip]
	mov	rdx, QWORD PTR default_p1_pins[rip]
	mov	rax, QWORD PTR -144[rbp]
	mov	rax, QWORD PTR [rax]
	sub	rsp, 8
	push	rcx
	push	rdx
	push	14
	push	2500
	push	250
	mov	r9d, 500
	mov	r8d, 50
	mov	ecx, 10
	mov	edx, 20000
	mov	rsi, rax
	lea	rdi, .LC60[rip]
	mov	eax, 0
	call	printf@PLT
	add	rsp, 48
	mov	edi, 0
	call	exit@PLT
.L259:
	cmp	DWORD PTR -100[rbp], 49
	jne	.L260
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -88[rbp], rax
	mov	DWORD PTR -112[rbp], 1
	cmp	DWORD PTR -108[rbp], 0
	jne	.L262
	mov	DWORD PTR -116[rbp], 1
	jmp	.L262
.L260:
	cmp	DWORD PTR -100[rbp], 53
	jne	.L261
	mov	rax, QWORD PTR optarg[rip]
	mov	QWORD PTR -80[rbp], rax
	mov	DWORD PTR -108[rbp], 1
	cmp	DWORD PTR -112[rbp], 0
	jne	.L262
	mov	DWORD PTR -116[rbp], 0
	jmp	.L262
.L261:
	lea	rdi, .LC61[rip]
	mov	eax, 0
	call	fatal
	jmp	.L262
.L247:
	mov	rax, QWORD PTR -80[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L248
	lea	rdi, .LC62[rip]
	mov	eax, 0
	call	fatal
.L248:
	mov	rdx, QWORD PTR -80[rbp]
	mov	rcx, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR -116[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	parse_pin_lists
	cmp	QWORD PTR -32[rbp], 0
	je	.L263
	lea	rcx, -96[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	edx, 10
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	DWORD PTR dma_chan[rip], eax
	mov	rax, QWORD PTR -32[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L264
	mov	rax, QWORD PTR -32[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jg	.L264
	mov	rax, QWORD PTR -96[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	jne	.L264
	mov	eax, DWORD PTR dma_chan[rip]
	test	eax, eax
	js	.L264
	mov	eax, DWORD PTR dma_chan[rip]
	cmp	eax, 14
	jle	.L265
.L264:
	lea	rdi, .LC63[rip]
	mov	eax, 0
	call	fatal
	jmp	.L265
.L263:
	mov	DWORD PTR dma_chan[rip], 14
.L265:
	cmp	QWORD PTR -56[rbp], 0
	je	.L266
	lea	rcx, -96[rbp]
	mov	rax, QWORD PTR -56[rbp]
	mov	edx, 10
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	DWORD PTR idle_timeout[rip], eax
	mov	rax, QWORD PTR -56[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L267
	mov	rax, QWORD PTR -56[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jg	.L267
	mov	rax, QWORD PTR -96[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L268
	mov	rax, QWORD PTR -96[rbp]
	lea	rsi, .LC64[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L267
.L268:
	mov	eax, DWORD PTR idle_timeout[rip]
	cmp	eax, 9
	jle	.L267
	mov	eax, DWORD PTR idle_timeout[rip]
	cmp	eax, 3600000
	jle	.L269
.L267:
	lea	rdi, .LC65[rip]
	mov	eax, 0
	call	fatal
	jmp	.L269
.L266:
	mov	DWORD PTR idle_timeout[rip], 0
.L269:
	cmp	QWORD PTR -48[rbp], 0
	je	.L270
	lea	rcx, -96[rbp]
	mov	rax, QWORD PTR -48[rbp]
	mov	edx, 10
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	DWORD PTR cycle_time_us[rip], eax
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L271
	mov	rax, QWORD PTR -48[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jg	.L271
	mov	rax, QWORD PTR -96[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L272
	mov	rax, QWORD PTR -96[rbp]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L271
.L272:
	mov	eax, DWORD PTR cycle_time_us[rip]
	cmp	eax, 999
	jle	.L271
	mov	eax, DWORD PTR cycle_time_us[rip]
	cmp	eax, 1000000
	jle	.L273
.L271:
	lea	rdi, .LC66[rip]
	mov	eax, 0
	call	fatal
	jmp	.L273
.L270:
	mov	DWORD PTR cycle_time_us[rip], 20000
.L273:
	cmp	QWORD PTR -40[rbp], 0
	je	.L274
	lea	rcx, -96[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	edx, 10
	mov	rsi, rcx
	mov	rdi, rax
	call	strtol@PLT
	mov	DWORD PTR step_time_us[rip], eax
	mov	rax, QWORD PTR -40[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 47
	jle	.L275
	mov	rax, QWORD PTR -40[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 57
	jg	.L275
	mov	rax, QWORD PTR -96[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L276
	mov	rax, QWORD PTR -96[rbp]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	call	strcmp@PLT
	test	eax, eax
	jne	.L275
.L276:
	mov	eax, DWORD PTR step_time_us[rip]
	test	eax, eax
	jle	.L275
	mov	eax, DWORD PTR step_time_us[rip]
	cmp	eax, 1000
	jle	.L277
.L275:
	lea	rdi, .LC67[rip]
	mov	eax, 0
	call	fatal
	jmp	.L277
.L274:
	mov	DWORD PTR step_time_us[rip], 10
.L277:
	mov	eax, DWORD PTR cycle_time_us[rip]
	mov	ecx, DWORD PTR step_time_us[rip]
	cdq
	idiv	ecx
	mov	eax, edx
	test	eax, eax
	je	.L278
	lea	rdi, .LC68[rip]
	mov	eax, 0
	call	fatal
.L278:
	mov	eax, DWORD PTR cycle_time_us[rip]
	mov	ebx, DWORD PTR step_time_us[rip]
	cdq
	idiv	ebx
	cmp	eax, 99
	jg	.L279
	lea	rdi, .LC69[rip]
	mov	eax, 0
	call	fatal
.L279:
	cmp	QWORD PTR -72[rbp], 0
	je	.L280
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC70[rip]
	mov	rdi, rax
	call	parse_min_max_arg
	mov	DWORD PTR servo_min_ticks[rip], eax
	jmp	.L281
.L280:
	mov	ebx, DWORD PTR step_time_us[rip]
	mov	eax, 500
	cdq
	idiv	ebx
	mov	DWORD PTR servo_min_ticks[rip], eax
.L281:
	cmp	QWORD PTR -64[rbp], 0
	je	.L282
	mov	rax, QWORD PTR -64[rbp]
	lea	rsi, .LC71[rip]
	mov	rdi, rax
	call	parse_min_max_arg
	mov	DWORD PTR servo_max_ticks[rip], eax
	jmp	.L283
.L282:
	mov	ebx, DWORD PTR step_time_us[rip]
	mov	eax, 2500
	cdq
	idiv	ebx
	mov	DWORD PTR servo_max_ticks[rip], eax
.L283:
	mov	eax, DWORD PTR cycle_time_us[rip]
	mov	ebx, DWORD PTR step_time_us[rip]
	cdq
	idiv	ebx
	mov	DWORD PTR num_samples[rip], eax
	mov	eax, DWORD PTR num_samples[rip]
	add	eax, 16
	add	eax, eax
	mov	DWORD PTR num_cbs[rip], eax
	mov	eax, DWORD PTR num_cbs[rip]
	cdqe
	sal	rax, 5
	mov	rdx, rax
	mov	eax, DWORD PTR num_samples[rip]
	sal	eax, 2
	cdqe
	add	rax, rdx
	add	rax, 4223
	shr	rax, 12
	mov	DWORD PTR num_pages[rip], eax
	mov	eax, DWORD PTR num_pages[rip]
	cmp	eax, 4096
	jle	.L284
	lea	rdi, .LC72[rip]
	mov	eax, 0
	call	fatal
.L284:
	mov	edx, DWORD PTR servo_max_ticks[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cmp	edx, eax
	jle	.L285
	lea	rdi, .LC73[rip]
	mov	eax, 0
	call	fatal
.L285:
	mov	edx, DWORD PTR servo_min_ticks[rip]
	mov	eax, DWORD PTR servo_max_ticks[rip]
	cmp	edx, eax
	jl	.L286
	lea	rdi, .LC74[rip]
	mov	eax, 0
	call	fatal
.L286:
	call	board_rev
	mov	esi, eax
	lea	rdi, .LC75[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L287
	lea	rax, .LC76[rip]
	jmp	.L288
.L287:
	lea	rax, .LC77[rip]
.L288:
	mov	rsi, rax
	lea	rdi, .LC78[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR dma_chan[rip]
	mov	esi, eax
	lea	rdi, .LC79[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR idle_timeout[rip]
	test	eax, eax
	je	.L289
	mov	eax, DWORD PTR idle_timeout[rip]
	mov	esi, eax
	lea	rdi, .LC80[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L290
.L289:
	lea	rdi, .LC81[rip]
	call	puts@PLT
.L290:
	mov	eax, DWORD PTR num_servos[rip]
	mov	esi, eax
	lea	rdi, .LC82[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR cycle_time_us[rip]
	mov	esi, eax
	lea	rdi, .LC83[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR step_time_us[rip]
	mov	esi, eax
	lea	rdi, .LC84[rip]
	mov	eax, 0
	call	printf@PLT
	mov	edx, DWORD PTR servo_min_ticks[rip]
	mov	eax, DWORD PTR step_time_us[rip]
	imul	edx, eax
	mov	eax, DWORD PTR servo_min_ticks[rip]
	mov	esi, eax
	lea	rdi, .LC85[rip]
	mov	eax, 0
	call	printf@PLT
	mov	edx, DWORD PTR servo_max_ticks[rip]
	mov	eax, DWORD PTR step_time_us[rip]
	imul	edx, eax
	mov	eax, DWORD PTR servo_max_ticks[rip]
	mov	esi, eax
	lea	rdi, .LC86[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR invert[rip]
	test	eax, eax
	je	.L291
	lea	rax, .LC87[rip]
	jmp	.L292
.L291:
	lea	rax, .LC88[rip]
.L292:
	mov	rsi, rax
	lea	rdi, .LC89[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -88[rbp]
	mov	rsi, rax
	lea	rdi, .LC90[rip]
	mov	eax, 0
	call	printf@PLT
	call	board_rev
	cmp	eax, 1
	jle	.L293
	mov	rax, QWORD PTR -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC91[rip]
	mov	eax, 0
	call	printf@PLT
.L293:
	lea	rdi, .LC92[rip]
	call	puts@PLT
	mov	DWORD PTR -120[rbp], 0
	jmp	.L294
.L297:
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L311
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	ebx, al
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edi, eax
	call	gpio2pinname
	mov	rdx, rax
	mov	eax, DWORD PTR -120[rbp]
	mov	ecx, ebx
	mov	esi, eax
	lea	rdi, .LC52[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L296
.L311:
	nop
.L296:
	add	DWORD PTR -120[rbp], 1
.L294:
	cmp	DWORD PTR -120[rbp], 31
	jle	.L297
	mov	edi, 10
	call	putchar@PLT
	call	init_idle_timers
	call	setup_sighandlers
	mov	esi, 3840
	mov	edi, 536899584
	call	map_peripheral
	mov	QWORD PTR dma_reg[rip], rax
	mov	rdx, QWORD PTR dma_reg[rip]
	mov	eax, DWORD PTR dma_chan[rip]
	sal	eax, 8
	cdqe
	add	rax, rdx
	mov	QWORD PTR dma_reg[rip], rax
	mov	esi, 40
	mov	edi, 539017216
	call	map_peripheral
	mov	QWORD PTR pwm_reg[rip], rax
	mov	esi, 36
	mov	edi, 538980352
	call	map_peripheral
	mov	QWORD PTR pcm_reg[rip], rax
	mov	esi, 168
	mov	edi, 537923584
	call	map_peripheral
	mov	QWORD PTR clk_reg[rip], rax
	mov	esi, 256
	mov	edi, 538968064
	call	map_peripheral
	mov	QWORD PTR gpio_reg[rip], rax
	mov	eax, DWORD PTR num_pages[rip]
	sal	eax, 12
	cdqe
	mov	r9d, 0
	mov	r8d, -1
	mov	ecx, 24609
	mov	edx, 3
	mov	rsi, rax
	mov	edi, 0
	call	mmap@PLT
	mov	QWORD PTR virtcached[rip], rax
	mov	rax, QWORD PTR virtcached[rip]
	cmp	rax, -1
	jne	.L298
	lea	rdi, .LC93[rip]
	mov	eax, 0
	call	fatal
.L298:
	mov	rax, QWORD PTR virtcached[rip]
	and	eax, 4095
	test	rax, rax
	je	.L299
	lea	rdi, .LC94[rip]
	mov	eax, 0
	call	fatal
.L299:
	mov	eax, DWORD PTR num_pages[rip]
	sal	eax, 12
	movsx	rdx, eax
	mov	rax, QWORD PTR virtcached[rip]
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	mov	eax, DWORD PTR num_pages[rip]
	sal	eax, 12
	cdqe
	mov	r9d, 0
	mov	r8d, -1
	mov	ecx, 24609
	mov	edx, 3
	mov	rsi, rax
	mov	edi, 0
	call	mmap@PLT
	mov	QWORD PTR virtbase[rip], rax
	mov	rax, QWORD PTR virtbase[rip]
	cmp	rax, -1
	jne	.L300
	lea	rdi, .LC95[rip]
	mov	eax, 0
	call	fatal
.L300:
	mov	rax, QWORD PTR virtbase[rip]
	and	eax, 4095
	test	rax, rax
	je	.L301
	lea	rdi, .LC94[rip]
	mov	eax, 0
	call	fatal
.L301:
	mov	eax, DWORD PTR num_pages[rip]
	sal	eax, 12
	movsx	rdx, eax
	mov	rax, QWORD PTR virtbase[rip]
	mov	rsi, rdx
	mov	rdi, rax
	call	munmap@PLT
	call	make_pagemap
	mov	rax, QWORD PTR virtbase[rip]
	mov	QWORD PTR turnoff_mask[rip], rax
	mov	rdx, QWORD PTR virtbase[rip]
	mov	eax, DWORD PTR num_samples[rip]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	QWORD PTR turnon_mask[rip], rax
	mov	rdx, QWORD PTR virtbase[rip]
	mov	eax, DWORD PTR num_samples[rip]
	add	eax, 39
	and	eax, -8
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	QWORD PTR cb_base[rip], rax
	mov	DWORD PTR -120[rbp], 0
	jmp	.L302
.L305:
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	cmp	al, -1
	je	.L312
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	edi, eax
	call	gpio_get_mode
	mov	edx, DWORD PTR -120[rbp]
	movsx	rdx, edx
	lea	rcx, 0[0+rdx*4]
	lea	rdx, gpiomode[rip]
	mov	DWORD PTR [rcx+rdx], eax
	mov	eax, DWORD PTR invert[rip]
	test	eax, eax
	setne	al
	movzx	edx, al
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rcx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rcx]
	movzx	eax, al
	mov	esi, edx
	mov	edi, eax
	call	gpio_set
	mov	eax, DWORD PTR -120[rbp]
	cdqe
	lea	rdx, servo2gpio[rip]
	movzx	eax, BYTE PTR [rax+rdx]
	movzx	eax, al
	mov	esi, 1
	mov	edi, eax
	call	gpio_set_mode
	jmp	.L304
.L312:
	nop
.L304:
	add	DWORD PTR -120[rbp], 1
.L302:
	cmp	DWORD PTR -120[rbp], 31
	jle	.L305
	mov	DWORD PTR restore_gpio_modes[rip], 1
	call	init_ctrl_data
	call	init_hardware
	lea	rdi, .LC2[rip]
	call	unlink@PLT
	mov	esi, 438
	lea	rdi, .LC2[rip]
	call	mkfifo@PLT
	test	eax, eax
	jns	.L306
	lea	rsi, .LC2[rip]
	lea	rdi, .LC96[rip]
	mov	eax, 0
	call	fatal
.L306:
	mov	esi, 438
	lea	rdi, .LC2[rip]
	call	chmod@PLT
	test	eax, eax
	jns	.L307
	lea	rsi, .LC2[rip]
	lea	rdi, .LC97[rip]
	mov	eax, 0
	call	fatal
.L307:
	cmp	DWORD PTR -104[rbp], 0
	je	.L308
	mov	esi, 1
	mov	edi, 0
	call	daemon@PLT
	test	eax, eax
	jns	.L308
	lea	rdi, .LC98[rip]
	mov	eax, 0
	call	fatal
.L308:
	call	go_go_go
	mov	eax, 0
	mov	rbx, QWORD PTR -24[rbp]
	sub	rbx, QWORD PTR fs:40
	je	.L310
	call	__stack_chk_fail@PLT
.L310:
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE31:
	.size	main, .-main
	.local	line.3
	.comm	line.3,128,32
	.local	rev.2
	.comm	rev.2,4,4
	.local	res.1
	.comm	res.1,16,16
	.section	.rodata
.LC99:
	.string	"pcm"
.LC100:
	.string	"idle-timeout"
.LC101:
	.string	"help"
.LC102:
	.string	"p1pins"
.LC103:
	.string	"p5pins"
.LC104:
	.string	"invert"
.LC105:
	.string	"cycle-time"
.LC106:
	.string	"step-size"
.LC107:
	.string	"debug"
.LC108:
	.string	"dma-chan"
	.section	.data.rel.local
	.align 32
	.type	long_options.0, @object
	.size	long_options.0, 416
long_options.0:
	.quad	.LC99
	.long	0
	.zero	4
	.quad	0
	.long	112
	.zero	4
	.quad	.LC100
	.long	1
	.zero	4
	.quad	0
	.long	116
	.zero	4
	.quad	.LC101
	.long	0
	.zero	4
	.quad	0
	.long	104
	.zero	4
	.quad	.LC102
	.long	1
	.zero	4
	.quad	0
	.long	49
	.zero	4
	.quad	.LC103
	.long	1
	.zero	4
	.quad	0
	.long	53
	.zero	4
	.quad	.LC70
	.long	1
	.zero	4
	.quad	0
	.long	109
	.zero	4
	.quad	.LC71
	.long	1
	.zero	4
	.quad	0
	.long	120
	.zero	4
	.quad	.LC104
	.long	0
	.zero	4
	.quad	0
	.long	105
	.zero	4
	.quad	.LC105
	.long	1
	.zero	4
	.quad	0
	.long	99
	.zero	4
	.quad	.LC106
	.long	1
	.zero	4
	.quad	0
	.long	115
	.zero	4
	.quad	.LC107
	.long	0
	.zero	4
	.quad	0
	.long	102
	.zero	4
	.quad	.LC108
	.long	1
	.zero	4
	.quad	0
	.long	100
	.zero	4
	.quad	0
	.long	0
	.zero	4
	.quad	0
	.long	0
	.zero	4
	.section	.rodata
	.align 8
.LC22:
	.long	0
	.long	1079574528
	.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	"398739.c"
	.text
	.section	.rodata
	.align	2
.LC0:
	.ascii	"7,16,18,22\000"
	.data
	.align	2
	.type	default_p1_pins, %object
	.size	default_p1_pins, 4
default_p1_pins:
	.word	.LC0
	.section	.rodata
	.align	2
.LC1:
	.ascii	"\000"
	.data
	.align	2
	.type	default_p5_pins, %object
	.size	default_p5_pins, 4
default_p5_pins:
	.word	.LC1
	.align	2
	.type	rev1_p1pin2gpio_map, %object
	.size	rev1_p1pin2gpio_map, 26
rev1_p1pin2gpio_map:
	.ascii	"\377\377\000\377\001\377\004\016\377\017\021\022\025"
	.ascii	"\377\026\027\377\030\012\377\011\031\013\010\377\007"
	.align	2
	.type	rev1_p5pin2gpio_map, %object
	.size	rev1_p5pin2gpio_map, 8
rev1_p5pin2gpio_map:
	.ascii	"\377\377\377\377\377\377\377\377"
	.align	2
	.type	rev2_p1pin2gpio_map, %object
	.size	rev2_p1pin2gpio_map, 26
rev2_p1pin2gpio_map:
	.ascii	"\377\377\002\377\003\377\004\016\377\017\021\022\033"
	.ascii	"\377\026\027\377\030\012\377\011\031\013\010\377\007"
	.align	2
	.type	rev2_p5pin2gpio_map, %object
	.size	rev2_p5pin2gpio_map, 8
rev2_p5pin2gpio_map:
	.ascii	"\377\377\034\035\036\037\377\377"
	.local	cycle_time_us
	.comm	cycle_time_us,4,4
	.local	step_time_us
	.comm	step_time_us,4,4
	.local	servo2gpio
	.comm	servo2gpio,32,4
	.local	p1pin2servo
	.comm	p1pin2servo,27,4
	.local	p5pin2servo
	.comm	p5pin2servo,9,4
	.local	servostart
	.comm	servostart,128,4
	.local	servowidth
	.comm	servowidth,128,4
	.local	num_servos
	.comm	num_servos,4,4
	.local	gpiomode
	.comm	gpiomode,128,4
	.local	restore_gpio_modes
	.comm	restore_gpio_modes,4,4
	.comm	page_map,4,4
	.local	virtbase
	.comm	virtbase,4,4
	.local	virtcached
	.comm	virtcached,4,4
	.local	pwm_reg
	.comm	pwm_reg,4,4
	.local	pcm_reg
	.comm	pcm_reg,4,4
	.local	clk_reg
	.comm	clk_reg,4,4
	.local	dma_reg
	.comm	dma_reg,4,4
	.local	gpio_reg
	.comm	gpio_reg,4,4
	.local	delay_hw
	.comm	delay_hw,4,4
	.local	servo_kill_time
	.comm	servo_kill_time,4,4
	.local	dma_chan
	.comm	dma_chan,4,4
	.local	idle_timeout
	.comm	idle_timeout,4,4
	.local	invert
	.comm	invert,4,4
	.local	servo_min_ticks
	.comm	servo_min_ticks,4,4
	.local	servo_max_ticks
	.comm	servo_max_ticks,4,4
	.local	num_samples
	.comm	num_samples,4,4
	.local	num_cbs
	.comm	num_cbs,4,4
	.local	num_pages
	.comm	num_pages,4,4
	.local	turnoff_mask
	.comm	turnoff_mask,4,4
	.local	turnon_mask
	.comm	turnon_mask,4,4
	.local	cb_base
	.comm	cb_base,4,4
	.section	.rodata
	.align	2
.LC2:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	udelay, %function
udelay:
	@ 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, .L3
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	mov	r3, r2
	lsl	r3, r3, #5
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #3
	str	r3, [fp, #-12]
	sub	r3, fp, #16
	mov	r1, #0
	mov	r0, r3
	bl	nanosleep
	nop
	ldr	r3, .L3
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L2
	bl	__stack_chk_fail
.L2:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L4:
	.align	2
.L3:
	.word	.LC2
	.size	udelay, .-udelay
	.section	.rodata
	.align	2
.LC3:
	.ascii	"/dev/servoblaster\000"
	.align	2
.LC4:
	.ascii	"/dev/servoblaster-cfg\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	terminate, %function
terminate:
	@ 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, .L14
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L6
	ldr	r3, .L14+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L6
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L7
.L9:
	ldr	r2, .L14+8
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L8
	mov	r1, #0
	ldr	r0, [fp, #-8]
	bl	set_servo
.L8:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L7:
	ldr	r3, [fp, #-8]
	cmp	r3, #31
	ble	.L9
	ldr	r3, .L14+12
	ldr	r3, [r3]
	mov	r0, r3
	bl	udelay
	ldr	r3, .L14
	ldr	r3, [r3]
	mov	r2, #-2147483648
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
.L6:
	ldr	r3, .L14+16
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L10
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L11
.L13:
	ldr	r2, .L14+8
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L12
	ldr	r2, .L14+8
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r0, r3
	ldr	r2, .L14+20
	ldr	r3, [fp, #-8]
	ldr	r3, [r2, r3, lsl #2]
	mov	r1, r3
	bl	gpio_set_mode
.L12:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L11:
	ldr	r3, [fp, #-8]
	cmp	r3, #31
	ble	.L13
.L10:
	ldr	r0, .L14+24
	bl	unlink
	ldr	r0, .L14+28
	bl	unlink
	mov	r0, #1
	bl	exit
.L15:
	.align	2
.L14:
	.word	dma_reg
	.word	virtbase
	.word	servo2gpio
	.word	cycle_time_us
	.word	restore_gpio_modes
	.word	gpiomode
	.word	.LC3
	.word	.LC4
	.size	terminate, .-terminate
	.section	.rodata
	.align	2
.LC5:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	fatal, %function
fatal:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L18
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r3, .L18+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-12]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	vfprintf
	mov	r0, #0
	bl	terminate
	nop
	ldr	r3, .L18
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L17
	bl	__stack_chk_fail
.L17:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L19:
	.align	2
.L18:
	.word	.LC5
	.word	stderr
	.size	fatal, .-fatal
	.section	.rodata
	.align	2
.LC6:
	.ascii	"servod: calloc() failed\012\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_idle_timers, %function
init_idle_timers:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	mov	r1, #8
	mov	r0, #32
	bl	calloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L23
	str	r2, [r3]
	ldr	r3, .L23
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L22
	ldr	r0, .L23+4
	bl	fatal
.L22:
	nop
	pop	{fp, pc}
.L24:
	.align	2
.L23:
	.word	servo_kill_time
	.word	.LC6
	.size	init_idle_timers, .-init_idle_timers
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	update_idle_time, %function
update_idle_time:
	@ 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, .L31
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L30
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	mov	r1, #0
	mov	r0, r3
	bl	gettimeofday
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r1, [r3]
	ldr	r3, .L31
	ldr	r3, [r3]
	ldr	r2, .L31+8
	smull	r0, r2, r3, r2
	asr	r2, r2, #6
	asr	r3, r3, #31
	sub	r2, r2, r3
	ldr	r3, .L31+4
	ldr	r0, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r0, r3
	add	r2, r1, r2
	str	r2, [r3]
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r0, [r3, #4]
	ldr	r3, .L31
	ldr	r1, [r3]
	ldr	r3, .L31+8
	smull	r2, r3, r1, r3
	asr	r2, r3, #6
	asr	r3, r1, #31
	sub	r2, r2, r3
	mov	r3, r2
	lsl	r3, r3, #5
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #3
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #5
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #3
	mov	r1, r3
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	add	r2, r0, r1
	str	r2, [r3, #4]
	b	.L28
.L29:
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3, #4]
	ldr	r2, .L31+4
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	lsl	r2, r2, #3
	add	r2, r1, r2
	sub	r3, r3, #999424
	sub	r3, r3, #576
	str	r3, [r2, #4]
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3]
	add	r2, r2, #1
	str	r2, [r3]
.L28:
	ldr	r3, .L31+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3, #4]
	ldr	r2, .L31+12
	cmp	r3, r2
	bge	.L29
	b	.L25
.L30:
	nop
.L25:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L32:
	.align	2
.L31:
	.word	idle_timeout
	.word	servo_kill_time
	.word	274877907
	.word	1000000
	.size	update_idle_time, .-update_idle_time
	.section	.rodata
	.align	2
.LC7:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	get_next_idle_timeout, %function
get_next_idle_timeout:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	str	r0, [fp, #-40]
	ldr	r3, .L43
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #60
	str	r3, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	sub	r3, fp, #24
	mov	r1, #0
	mov	r0, r3
	bl	gettimeofday
	mov	r3, #0
	str	r3, [fp, #-36]
	b	.L34
.L40:
	ldr	r2, .L43+4
	ldr	r3, [fp, #-36]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L42
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L42
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	cmp	r2, r3
	blt	.L38
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	cmp	r2, r3
	bne	.L39
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-20]
	cmp	r2, r3
	bgt	.L39
.L38:
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	mov	r2, #0
	str	r2, [r3]
	ldr	r0, [fp, #-36]
	bl	set_servo_idle
	b	.L37
.L39:
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	sub	r1, r2, r3
	mov	r2, r1
	lsl	r2, r2, #5
	sub	r2, r2, r1
	lsl	r3, r2, #6
	sub	r3, r3, r2
	lsl	r3, r3, #3
	add	r3, r3, r1
	lsl	r3, r3, #6
	mov	r1, r3
	ldr	r3, .L43+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-36]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3, #4]
	add	r2, r1, r3
	ldr	r3, [fp, #-20]
	sub	r3, r2, r3
	str	r3, [fp, #-32]
	ldr	r1, [fp, #-16]
	mov	r2, r1
	lsl	r2, r2, #5
	sub	r2, r2, r1
	lsl	r3, r2, #6
	sub	r3, r3, r2
	lsl	r3, r3, #3
	add	r3, r3, r1
	lsl	r3, r3, #6
	mov	r2, r3
	ldr	r3, [fp, #-12]
	add	r3, r2, r3
	str	r3, [fp, #-28]
	ldr	r2, [fp, #-32]
	ldr	r3, [fp, #-28]
	cmp	r2, r3
	bge	.L37
	ldr	r3, [fp, #-32]
	ldr	r2, .L43+12
	smull	r1, r2, r3, r2
	asr	r2, r2, #18
	asr	r3, r3, #31
	sub	r3, r2, r3
	str	r3, [fp, #-16]
	ldr	r0, [fp, #-32]
	ldr	r3, .L43+12
	smull	r2, r3, r0, r3
	asr	r2, r3, #18
	asr	r3, r0, #31
	sub	r1, r2, r3
	mov	r2, r1
	lsl	r2, r2, #5
	sub	r2, r2, r1
	lsl	r3, r2, #6
	sub	r3, r3, r2
	lsl	r3, r3, #3
	add	r3, r3, r1
	lsl	r3, r3, #6
	sub	r1, r0, r3
	str	r1, [fp, #-12]
	b	.L37
.L42:
	nop
.L37:
	ldr	r3, [fp, #-36]
	add	r3, r3, #1
	str	r3, [fp, #-36]
.L34:
	ldr	r3, [fp, #-36]
	cmp	r3, #31
	ble	.L40
	ldr	r3, [fp, #-40]
	mov	r2, r3
	sub	r3, fp, #16
	ldm	r3, {r0, r1}
	stm	r2, {r0, r1}
	nop
	ldr	r3, .L43
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L41
	bl	__stack_chk_fail
.L41:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L44:
	.align	2
.L43:
	.word	.LC7
	.word	servo2gpio
	.word	servo_kill_time
	.word	1125899907
	.size	get_next_idle_timeout, .-get_next_idle_timeout
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio_get_mode, %function
gpio_get_mode:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	ldr	r3, .L47
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, .L47+4
	umull	r0, r3, r1, r3
	lsr	r3, r3, #3
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r1, [fp, #-16]
	ldr	r3, .L47+4
	umull	r2, r3, r1, r3
	lsr	r2, r3, #3
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	ldr	r2, [fp, #-8]
	lsr	r3, r2, r3
	and	r3, r3, #7
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L48:
	.align	2
.L47:
	.word	gpio_reg
	.word	-858993459
	.size	gpio_get_mode, .-gpio_get_mode
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio_set_mode, %function
gpio_set_mode:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, .L50
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, .L50+4
	umull	r0, r3, r1, r3
	lsr	r3, r3, #3
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r1, [fp, #-16]
	ldr	r3, .L50+4
	umull	r2, r3, r1, r3
	lsr	r2, r3, #3
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	mov	r2, #7
	lsl	r3, r2, r3
	mvn	r3, r3
	mov	r2, r3
	ldr	r3, [fp, #-8]
	and	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r1, [fp, #-16]
	ldr	r3, .L50+4
	umull	r2, r3, r1, r3
	lsr	r2, r3, #3
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	ldr	r2, [fp, #-20]
	lsl	r3, r2, r3
	ldr	r2, [fp, #-8]
	orr	r3, r2, r3
	str	r3, [fp, #-8]
	ldr	r3, .L50
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, .L50+4
	umull	r0, r3, r1, r3
	lsr	r3, r3, #3
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-8]
	str	r2, [r3]
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L51:
	.align	2
.L50:
	.word	gpio_reg
	.word	-858993459
	.size	gpio_set_mode, .-gpio_set_mode
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio_set, %function
gpio_set:
	@ 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, #-12]
	cmp	r3, #0
	beq	.L53
	mov	r2, #1
	ldr	r3, [fp, #-8]
	lsl	r2, r2, r3
	ldr	r3, .L56
	ldr	r3, [r3]
	add	r3, r3, #28
	str	r2, [r3]
	b	.L55
.L53:
	mov	r2, #1
	ldr	r3, [fp, #-8]
	lsl	r2, r2, r3
	ldr	r3, .L56
	ldr	r3, [r3]
	add	r3, r3, #40
	str	r2, [r3]
.L55:
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L57:
	.align	2
.L56:
	.word	gpio_reg
	.size	gpio_set, .-gpio_set
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	mem_virt_to_phys, %function
mem_virt_to_phys:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	ldr	r3, .L60
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	sub	r3, r2, r3
	str	r3, [fp, #-8]
	ldr	r3, .L60+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsr	r3, r3, #12
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #20
	lsr	r3, r3, #20
	add	r3, r2, r3
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L61:
	.align	2
.L60:
	.word	virtbase
	.word	page_map
	.size	mem_virt_to_phys, .-mem_virt_to_phys
	.section	.rodata
	.align	2
.LC8:
	.ascii	"/dev/mem\000"
	.align	2
.LC9:
	.ascii	"servod: Failed to open /dev/mem: %m\012\000"
	.align	2
.LC10:
	.ascii	"servod: Failed to map peripheral at 0x%08x: %m\012\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	map_peripheral, %function
map_peripheral:
	@ args = 0, pretend = 0, frame = 16
	@ 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]
	mov	r1, #2
	ldr	r0, .L66
	bl	open
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bge	.L63
	ldr	r0, .L66+4
	bl	fatal
.L63:
	ldr	r3, [fp, #-16]
	str	r3, [sp, #4]
	ldr	r3, [fp, #-12]
	str	r3, [sp]
	mov	r3, #1
	mov	r2, #3
	ldr	r1, [fp, #-20]
	mov	r0, #0
	bl	mmap
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmn	r3, #1
	bne	.L64
	ldr	r1, [fp, #-16]
	ldr	r0, .L66+8
	bl	fatal
.L64:
	ldr	r0, [fp, #-12]
	bl	close
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L67:
	.align	2
.L66:
	.word	.LC8
	.word	.LC9
	.word	.LC10
	.size	map_peripheral, .-map_peripheral
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	set_servo_idle, %function
set_servo_idle:
	@ 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, .L71
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r2, #0
	str	r2, [r3]
	ldr	r2, .L71+4
	ldr	r3, [fp, #-8]
	ldr	r2, [r2, r3, lsl #2]
	ldr	r3, .L71+8
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L70
	ldr	r2, .L71+12
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r3, .L71+16
	ldr	r3, [r3]
	cmp	r3, #0
	movne	r3, #1
	moveq	r3, #0
	and	r3, r3, #255
	mov	r1, r3
	mov	r0, r2
	bl	gpio_set
.L70:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L72:
	.align	2
.L71:
	.word	turnon_mask
	.word	servowidth
	.word	num_samples
	.word	servo2gpio
	.word	invert
	.size	set_servo_idle, .-set_servo_idle
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	set_servo, %function
set_servo:
	@ 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]
	str	r1, [fp, #-28]
	ldr	r2, .L86
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r2, .L86+4
	ldr	r3, [fp, #-24]
	ldr	r3, [r2, r3, lsl #2]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	ble	.L74
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r1, .L86+12
	ldr	r3, [fp, #-24]
	ldr	r3, [r1, r3, lsl #2]
	mov	r1, r3
	ldr	r3, [fp, #-28]
	add	r3, r1, r3
	lsl	r3, r3, #2
	add	r3, r2, r3
	str	r3, [fp, #-16]
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r3, .L86+16
	ldr	r3, [r3]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bcc	.L75
	ldr	r3, .L86+16
	ldr	r3, [r3]
	lsl	r3, r3, #2
	rsb	r3, r3, #0
	ldr	r2, [fp, #-16]
	add	r3, r2, r3
	str	r3, [fp, #-16]
.L75:
	ldr	r3, [fp, #-28]
	str	r3, [fp, #-12]
	b	.L76
.L78:
	ldr	r3, [fp, #-16]
	sub	r3, r3, #4
	str	r3, [fp, #-16]
	ldr	r3, .L86+8
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bcs	.L77
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r3, .L86+16
	ldr	r3, [r3]
	sub	r3, r3, #-1073741823
	lsl	r3, r3, #2
	add	r3, r2, r3
	str	r3, [fp, #-16]
.L77:
	ldr	r3, [fp, #-16]
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	mvn	r3, r3
	and	r2, r2, r3
	ldr	r3, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-12]
	sub	r3, r3, #1
	str	r3, [fp, #-12]
.L76:
	ldr	r2, .L86+4
	ldr	r3, [fp, #-24]
	ldr	r3, [r2, r3, lsl #2]
	ldr	r2, [fp, #-12]
	cmp	r2, r3
	bgt	.L78
	b	.L79
.L74:
	ldr	r2, .L86+4
	ldr	r3, [fp, #-24]
	ldr	r3, [r2, r3, lsl #2]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	bge	.L79
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r1, .L86+12
	ldr	r3, [fp, #-24]
	ldr	r3, [r1, r3, lsl #2]
	mov	r1, r3
	ldr	r3, [fp, #-28]
	add	r3, r1, r3
	lsl	r3, r3, #2
	add	r3, r2, r3
	str	r3, [fp, #-16]
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r3, .L86+16
	ldr	r3, [r3]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bcc	.L80
	ldr	r3, .L86+16
	ldr	r3, [r3]
	lsl	r3, r3, #2
	rsb	r3, r3, #0
	ldr	r2, [fp, #-16]
	add	r3, r2, r3
	str	r3, [fp, #-16]
.L80:
	ldr	r3, [fp, #-28]
	str	r3, [fp, #-12]
	b	.L81
.L83:
	ldr	r3, [fp, #-16]
	add	r2, r3, #4
	str	r2, [fp, #-16]
	ldr	r1, [r3]
	ldr	r2, [fp, #-8]
	orr	r2, r1, r2
	str	r2, [r3]
	ldr	r3, .L86+8
	ldr	r2, [r3]
	ldr	r3, .L86+16
	ldr	r3, [r3]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bcc	.L82
	ldr	r3, .L86+8
	ldr	r3, [r3]
	str	r3, [fp, #-16]
.L82:
	ldr	r3, [fp, #-12]
	add	r3, r3, #1
	str	r3, [fp, #-12]
.L81:
	ldr	r2, .L86+4
	ldr	r3, [fp, #-24]
	ldr	r3, [r2, r3, lsl #2]
	ldr	r2, [fp, #-12]
	cmp	r2, r3
	blt	.L83
.L79:
	ldr	r1, .L86+4
	ldr	r3, [fp, #-24]
	ldr	r2, [fp, #-28]
	str	r2, [r1, r3, lsl #2]
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	bne	.L84
	ldr	r3, .L86+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r2, #0
	str	r2, [r3]
	b	.L85
.L84:
	ldr	r3, .L86+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-8]
	str	r2, [r3]
.L85:
	ldr	r0, [fp, #-24]
	bl	update_idle_time
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L87:
	.align	2
.L86:
	.word	servo2gpio
	.word	servowidth
	.word	turnoff_mask
	.word	servostart
	.word	num_samples
	.word	turnon_mask
	.size	set_servo, .-set_servo
	.section	.rodata
	.align	2
.LC11:
	.ascii	"servod: Failed to malloc page_map: %m\012\000"
	.align	2
.LC12:
	.ascii	"/proc/%d/pagemap\000"
	.align	2
.LC13:
	.ascii	"servod: Failed to open %s: %m\012\000"
	.align	2
.LC14:
	.ascii	"servod: Failed to seek on %s: %m\012\000"
	.align	2
.LC15:
	.ascii	"servod: Failed to read %s: %m\012\000"
	.align	2
.LC16:
	.ascii	"servod: Page %d not present (pfn 0x%016llx)\012\000"
	.align	2
.LC17:
	.ascii	"Failed to create uncached map of page %d at %p\012\000"
	.align	2
.LC18:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_pagemap, %function
make_pagemap:
	@ args = 0, pretend = 0, frame = 96
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #104
	ldr	r3, .L99
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	ldr	r3, .L99+4
	ldr	r3, [r3]
	lsl	r3, r3, #2
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L99+8
	str	r2, [r3]
	ldr	r3, .L99+8
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L89
	ldr	r0, .L99+12
	bl	fatal
.L89:
	mov	r1, #2
	ldr	r0, .L99+16
	bl	open
	str	r0, [fp, #-104]
	ldr	r3, [fp, #-104]
	cmp	r3, #0
	bge	.L90
	ldr	r0, .L99+20
	bl	fatal
.L90:
	bl	getpid
	str	r0, [fp, #-100]
	sub	r3, fp, #80
	ldr	r2, [fp, #-100]
	ldr	r1, .L99+24
	mov	r0, r3
	bl	sprintf
	sub	r3, fp, #80
	mov	r1, #0
	mov	r0, r3
	bl	open
	str	r0, [fp, #-96]
	ldr	r3, [fp, #-96]
	cmp	r3, #0
	bge	.L91
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L99+28
	bl	fatal
.L91:
	ldr	r3, .L99+32
	ldr	r3, [r3]
	lsr	r3, r3, #9
	mov	r2, #0
	mov	r1, r3
	ldr	r0, [fp, #-96]
	bl	lseek
	mov	r3, r0
	ldr	r2, .L99+32
	ldr	r2, [r2]
	lsr	r2, r2, #9
	cmp	r3, r2
	beq	.L92
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L99+36
	bl	fatal
.L92:
	mov	r3, #0
	str	r3, [fp, #-108]
	b	.L93
.L97:
	sub	r3, fp, #92
	mov	r2, #8
	mov	r1, r3
	ldr	r0, [fp, #-96]
	bl	read
	mov	r3, r0
	cmp	r3, #8
	beq	.L94
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L99+40
	bl	fatal
.L94:
	sub	r1, fp, #92
	ldmia	r1, {r0-r1}
	mov	r2, #0
	mov	r3, #0
	lsr	r2, r1, #23
	mov	r3, #0
	ldr	r0, .L99+44
	mov	r1, #0
	and	r4, r2, r0
	and	r5, r3, r1
	cmp	r5, #0
	cmpeq	r4, #268
	beq	.L95
	sub	r3, fp, #92
	ldmia	r3, {r2-r3}
	ldr	r1, [fp, #-108]
	ldr	r0, .L99+48
	bl	fatal
.L95:
	sub	r3, fp, #92
	ldmia	r3, {r2-r3}
	mov	r3, r2
	lsl	r2, r3, #12
	ldr	r3, .L99+8
	ldr	r1, [r3]
	ldr	r3, [fp, #-108]
	lsl	r3, r3, #2
	add	r3, r1, r3
	orr	r2, r2, #1073741824
	str	r2, [r3]
	ldr	r3, .L99+52
	ldr	r3, [r3]
	ldr	r2, [fp, #-108]
	lsl	r2, r2, #12
	add	r0, r3, r2
	sub	r3, fp, #92
	ldmia	r3, {r2-r3}
	mov	r3, r2
	lsl	r3, r3, #12
	orr	r3, r3, #1073741824
	str	r3, [sp, #4]
	ldr	r3, [fp, #-104]
	str	r3, [sp]
	ldr	r3, .L99+56
	mov	r2, #3
	mov	r1, #4096
	bl	mmap
	mov	r1, r0
	ldr	r3, .L99+52
	ldr	r3, [r3]
	ldr	r2, [fp, #-108]
	lsl	r2, r2, #12
	add	r3, r3, r2
	cmp	r1, r3
	beq	.L96
	ldr	r3, .L99+52
	ldr	r3, [r3]
	ldr	r2, [fp, #-108]
	lsl	r2, r2, #12
	add	r3, r3, r2
	mov	r2, r3
	ldr	r1, [fp, #-108]
	ldr	r0, .L99+60
	bl	fatal
.L96:
	ldr	r3, [fp, #-108]
	add	r3, r3, #1
	str	r3, [fp, #-108]
.L93:
	ldr	r3, .L99+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-108]
	cmp	r2, r3
	blt	.L97
	ldr	r0, [fp, #-96]
	bl	close
	ldr	r0, [fp, #-104]
	bl	close
	ldr	r3, .L99+52
	ldr	r0, [r3]
	ldr	r3, .L99+4
	ldr	r3, [r3]
	lsl	r3, r3, #12
	mov	r2, r3
	mov	r1, #0
	bl	memset
	nop
	ldr	r3, .L99
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L98
	bl	__stack_chk_fail
.L98:
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L100:
	.align	2
.L99:
	.word	.LC18
	.word	num_pages
	.word	page_map
	.word	.LC11
	.word	.LC8
	.word	.LC9
	.word	.LC12
	.word	.LC13
	.word	virtcached
	.word	.LC14
	.word	.LC15
	.word	447
	.word	.LC16
	.word	virtbase
	.word	24593
	.word	.LC17
	.size	make_pagemap, .-make_pagemap
	.section	.rodata
	.align	2
.LC19:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	setup_sighandlers, %function
setup_sighandlers:
	@ args = 0, pretend = 0, frame = 152
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #152
	ldr	r3, .L105
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-152]
	b	.L102
.L103:
	sub	r3, fp, #148
	mov	r2, #140
	mov	r1, #0
	mov	r0, r3
	bl	memset
	ldr	r3, .L105+4
	str	r3, [fp, #-148]
	sub	r3, fp, #148
	mov	r2, #0
	mov	r1, r3
	ldr	r0, [fp, #-152]
	bl	sigaction
	ldr	r3, [fp, #-152]
	add	r3, r3, #1
	str	r3, [fp, #-152]
.L102:
	ldr	r3, [fp, #-152]
	cmp	r3, #63
	ble	.L103
	nop
	ldr	r3, .L105
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L104
	bl	__stack_chk_fail
.L104:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L106:
	.align	2
.L105:
	.word	.LC19
	.word	terminate
	.size	setup_sighandlers, .-setup_sighandlers
	.global	__aeabi_idiv
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_ctrl_data, %function
init_ctrl_data:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L128
	ldr	r3, [r3]
	str	r3, [fp, #-44]
	mov	r3, #0
	str	r3, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, .L128+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L108
	ldr	r3, .L128+8
	str	r3, [fp, #-32]
	ldr	r3, .L128+12
	str	r3, [fp, #-28]
	b	.L109
.L108:
	ldr	r3, .L128+12
	str	r3, [fp, #-32]
	ldr	r3, .L128+8
	str	r3, [fp, #-28]
.L109:
	ldr	r3, .L128+16
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L110
	ldr	r3, .L128+20
	str	r3, [fp, #-40]
	ldr	r3, .L128+24
	str	r3, [fp, #-36]
	b	.L111
.L110:
	ldr	r3, .L128+28
	str	r3, [fp, #-40]
	ldr	r3, .L128+32
	str	r3, [fp, #-36]
.L111:
	ldr	r3, .L128+36
	ldr	r3, [r3]
	mov	r2, #128
	mov	r1, #0
	mov	r0, r3
	bl	memset
	mov	r3, #0
	str	r3, [fp, #-24]
	b	.L112
.L114:
	ldr	r2, .L128+40
	ldr	r3, [fp, #-24]
	mov	r1, #0
	str	r1, [r2, r3, lsl #2]
	ldr	r2, .L128+44
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L113
	ldr	r3, [fp, #-16]
	add	r3, r3, #1
	str	r3, [fp, #-16]
	ldr	r2, .L128+44
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	mov	r2, r3
	ldr	r3, [fp, #-8]
	orr	r3, r3, r2
	str	r3, [fp, #-8]
.L113:
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L112:
	ldr	r3, [fp, #-24]
	cmp	r3, #31
	ble	.L114
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L115
.L116:
	ldr	r3, .L128+48
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-8]
	str	r2, [r3]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L115:
	ldr	r3, .L128+52
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	blt	.L116
	mov	r3, #0
	str	r3, [fp, #-24]
	b	.L117
.L119:
	ldr	r2, .L128+44
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L118
	ldr	r1, .L128+56
	ldr	r3, [fp, #-24]
	ldr	r2, [fp, #-12]
	str	r2, [r1, r3, lsl #2]
	ldr	r3, .L128+52
	ldr	r3, [r3]
	ldr	r2, .L128+60
	ldr	r2, [r2]
	mov	r1, r2
	mov	r0, r3
	bl	__aeabi_idiv
	mov	r3, r0
	mov	r2, r3
	ldr	r3, [fp, #-12]
	add	r3, r3, r2
	str	r3, [fp, #-12]
.L118:
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L117:
	ldr	r3, [fp, #-24]
	cmp	r3, #31
	ble	.L119
	mov	r3, #0
	str	r3, [fp, #-24]
	b	.L120
.L122:
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L120:
	ldr	r3, [fp, #-24]
	cmp	r3, #31
	bgt	.L121
	ldr	r2, .L128+44
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L122
.L121:
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L123
.L127:
	ldr	r3, [fp, #-44]
	ldr	r2, .L128+64
	str	r2, [r3]
	ldr	r3, .L128+48
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-44]
	ldr	r2, [fp, #-32]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-44]
	mov	r2, #4
	str	r2, [r3, #12]
	ldr	r3, [fp, #-44]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	str	r3, [fp, #-44]
	ldr	r2, .L128+56
	ldr	r3, [fp, #-24]
	ldr	r3, [r2, r3, lsl #2]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	bne	.L124
	ldr	r3, [fp, #-44]
	ldr	r2, .L128+64
	str	r2, [r3]
	ldr	r3, .L128+36
	ldr	r2, [r3]
	ldr	r3, [fp, #-24]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-44]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-44]
	mov	r2, #4
	str	r2, [r3, #12]
	ldr	r3, [fp, #-44]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	str	r3, [fp, #-44]
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
	b	.L125
.L126:
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L125:
	ldr	r3, [fp, #-24]
	cmp	r3, #31
	bgt	.L124
	ldr	r2, .L128+44
	ldr	r3, [fp, #-24]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L126
.L124:
	ldr	r3, [fp, #-44]
	ldr	r2, [fp, #-36]
	str	r2, [r3]
	ldr	r3, .L128+48
	ldr	r3, [r3]
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-44]
	ldr	r2, [fp, #-40]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-44]
	mov	r2, #4
	str	r2, [r3, #12]
	ldr	r3, [fp, #-44]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-44]
	add	r3, r3, #32
	str	r3, [fp, #-44]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L123:
	ldr	r3, .L128+52
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	blt	.L127
	ldr	r3, [fp, #-44]
	sub	r3, r3, #32
	str	r3, [fp, #-44]
	ldr	r3, .L128
	ldr	r3, [r3]
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-44]
	str	r2, [r3, #20]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L129:
	.align	2
.L128:
	.word	cb_base
	.word	invert
	.word	2116026396
	.word	2116026408
	.word	delay_hw
	.word	2116075544
	.word	67436616
	.word	2116038660
	.word	67240008
	.word	turnon_mask
	.word	servowidth
	.word	servo2gpio
	.word	turnoff_mask
	.word	num_samples
	.word	servostart
	.word	num_servos
	.word	67108872
	.size	init_ctrl_data, .-init_ctrl_data
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_hardware, %function
init_hardware:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	ldr	r3, .L135
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L131
	ldr	r3, .L135+4
	ldr	r3, [r3]
	mov	r2, #0
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #160
	ldr	r2, .L135+12
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #164
	ldr	r2, .L135+16
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #160
	ldr	r2, .L135+20
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+24
	ldr	r3, [r3]
	lsl	r2, r3, #1
	ldr	r3, .L135+4
	ldr	r3, [r3]
	add	r3, r3, #16
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L135+4
	ldr	r3, [r3]
	add	r3, r3, #8
	ldr	r2, .L135+28
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L135+4
	ldr	r3, [r3]
	mov	r2, #64
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L135+4
	ldr	r3, [r3]
	mov	r2, #33
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	b	.L132
.L131:
	ldr	r3, .L135+32
	ldr	r3, [r3]
	mov	r2, #1
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #152
	ldr	r2, .L135+12
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #156
	ldr	r2, .L135+36
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+8
	ldr	r3, [r3]
	add	r3, r3, #152
	ldr	r2, .L135+20
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+32
	ldr	r3, [r3]
	add	r3, r3, #16
	mov	r2, #1073741824
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+24
	ldr	r3, [r3]
	sub	r3, r3, #1
	lsl	r2, r3, #10
	ldr	r3, .L135+32
	ldr	r3, [r3]
	add	r3, r3, #8
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L135+32
	ldr	r3, [r3]
	orr	r2, r2, #24
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+32
	ldr	r3, [r3]
	add	r3, r3, #20
	ldr	r2, .L135+40
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L135+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L135+32
	ldr	r3, [r3]
	orr	r2, r2, #512
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
.L132:
	ldr	r3, .L135+44
	ldr	r3, [r3]
	mov	r2, #-2147483648
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L135+44
	ldr	r3, [r3]
	mov	r2, #6
	str	r2, [r3]
	ldr	r3, .L135+48
	ldr	r2, [r3]
	ldr	r3, .L135+44
	ldr	r3, [r3]
	add	r4, r3, #4
	mov	r0, r2
	bl	mem_virt_to_phys
	mov	r3, r0
	str	r3, [r4]
	ldr	r3, .L135+44
	ldr	r3, [r3]
	add	r3, r3, #32
	mov	r2, #7
	str	r2, [r3]
	ldr	r3, .L135+44
	ldr	r3, [r3]
	ldr	r2, .L135+52
	str	r2, [r3]
	ldr	r3, .L135
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L134
	ldr	r3, .L135+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L135+32
	ldr	r3, [r3]
	orr	r2, r2, #4
	str	r2, [r3]
.L134:
	nop
	pop	{r4, r5, fp, pc}
.L136:
	.align	2
.L135:
	.word	delay_hw
	.word	pwm_reg
	.word	clk_reg
	.word	1509949446
	.word	1510973440
	.word	1509949462
	.word	step_time_us
	.word	-2147479793
	.word	pcm_reg
	.word	1511997440
	.word	1073758208
	.word	dma_reg
	.word	cb_base
	.word	277348353
	.size	init_hardware, .-init_hardware
	.section	.rodata
	.align	2
.LC20:
	.ascii	"---------------------------\000"
	.align	2
.LC21:
	.ascii	"Servo  Start  Width  TurnOn\000"
	.align	2
.LC22:
	.ascii	"%3d: %6d %6d %6d\012\000"
	.align	2
.LC23:
	.ascii	"\012Data:\000"
	.align	2
.LC24:
	.ascii	"@%5d: %08x\012\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	do_debug, %function
do_debug:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	mov	r3, #0
	str	r3, [fp, #-16]
	mvn	r3, #0
	str	r3, [fp, #-12]
	ldr	r0, .L144
	bl	puts
	ldr	r0, .L144+4
	bl	puts
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L138
.L140:
	ldr	r2, .L144+8
	ldr	r3, [fp, #-20]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L139
	ldr	r2, .L144+12
	ldr	r3, [fp, #-20]
	ldr	r1, [r2, r3, lsl #2]
	ldr	r2, .L144+16
	ldr	r3, [fp, #-20]
	ldr	r0, [r2, r3, lsl #2]
	ldr	r3, .L144+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]
	cmp	r3, #0
	movne	r3, #1
	moveq	r3, #0
	and	r3, r3, #255
	str	r3, [sp]
	mov	r3, r0
	mov	r2, r1
	ldr	r1, [fp, #-20]
	ldr	r0, .L144+24
	bl	printf
	ldr	r2, .L144+8
	ldr	r3, [fp, #-20]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	mov	r2, r3
	ldr	r3, [fp, #-16]
	orr	r3, r3, r2
	str	r3, [fp, #-16]
.L139:
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L138:
	ldr	r3, [fp, #-20]
	cmp	r3, #31
	ble	.L140
	ldr	r0, .L144+28
	bl	puts
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L141
.L143:
	ldr	r3, .L144+32
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	and	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r2, [fp, #-8]
	ldr	r3, [fp, #-12]
	cmp	r2, r3
	beq	.L142
	ldr	r2, [fp, #-8]
	ldr	r1, [fp, #-20]
	ldr	r0, .L144+36
	bl	printf
.L142:
	ldr	r3, [fp, #-8]
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L141:
	ldr	r3, .L144+40
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	blt	.L143
	ldr	r0, .L144
	bl	puts
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L145:
	.align	2
.L144:
	.word	.LC20
	.word	.LC21
	.word	servo2gpio
	.word	servostart
	.word	servowidth
	.word	turnon_mask
	.word	.LC22
	.word	.LC23
	.word	turnoff_mask
	.word	.LC24
	.word	num_samples
	.size	do_debug, .-do_debug
	.section	.rodata
	.align	2
.LC25:
	.ascii	"us\000"
	.global	__aeabi_i2d
	.global	__aeabi_ddiv
	.align	2
.LC26:
	.ascii	"%\000"
	.global	__aeabi_dmul
	.global	__aeabi_dadd
	.global	__aeabi_dcmpgt
	.global	__aeabi_dsub
	.global	__aeabi_dcmplt
	.global	__aeabi_dcmpeq
	.global	__aeabi_d2iz
	.align	2
.LC27:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_width, %function
parse_width:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #32
	str	r0, [fp, #-40]
	str	r1, [fp, #-44]
	ldr	r3, .L171
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	ldr	r3, [fp, #-44]
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #45
	beq	.L147
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #43
	bne	.L148
.L147:
	ldr	r3, [fp, #-32]
	add	r3, r3, #1
	str	r3, [fp, #-32]
.L148:
	ldr	r3, [fp, #-32]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L149
	ldr	r3, [fp, #-32]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bls	.L150
.L149:
	mvn	r3, #0
	b	.L164
.L150:
	sub	r3, fp, #36
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	strtod
	str	r0, [fp, #-28]
	str	r1, [fp, #-24]
	ldr	r3, [fp, #-36]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L152
	ldr	r3, [fp, #-36]
	ldr	r1, .L171+4
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L153
	ldr	r3, .L171+8
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_ddiv
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
	b	.L152
.L153:
	ldr	r3, [fp, #-36]
	ldr	r1, .L171+12
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L154
	ldr	r3, .L171+16
	ldr	r2, [r3]
	ldr	r3, .L171+20
	ldr	r3, [r3]
	sub	r3, r2, r3
	mov	r0, r3
	bl	__aeabi_i2d
	sub	r3, fp, #28
	ldmia	r3, {r2-r3}
	bl	__aeabi_dmul
	mov	r2, r0
	mov	r3, r1
	mov	r0, r2
	mov	r1, r3
	mov	r2, #0
	ldr	r3, .L171+24
	bl	__aeabi_ddiv
	mov	r2, r0
	mov	r3, r1
	mov	r4, r2
	mov	r5, r3
	ldr	r3, .L171+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	mov	r0, r4
	mov	r1, r5
	bl	__aeabi_dadd
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
	b	.L152
.L154:
	mvn	r3, #0
	b	.L164
.L152:
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	floor
	str	r0, [fp, #-28]
	str	r1, [fp, #-24]
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #43
	bne	.L155
	ldr	r2, .L171+28
	ldr	r3, [fp, #-40]
	ldr	r3, [r2, r3, lsl #2]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dadd
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
	ldr	r3, .L171+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L156
	ldr	r3, .L171+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
	b	.L156
.L155:
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #45
	bne	.L156
	ldr	r2, .L171+28
	ldr	r3, [fp, #-40]
	ldr	r3, [r2, r3, lsl #2]
	mov	r0, r3
	bl	__aeabi_i2d
	sub	r3, fp, #28
	ldmia	r3, {r2-r3}
	bl	__aeabi_dsub
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
	ldr	r3, .L171+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmplt
	mov	r3, r0
	cmp	r3, #0
	beq	.L156
	ldr	r3, .L171+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	str	r2, [fp, #-28]
	str	r3, [fp, #-24]
.L156:
	mov	r2, #0
	mov	r3, #0
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpeq
	mov	r3, r0
	cmp	r3, #0
	beq	.L169
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_d2iz
	mov	r3, r0
	b	.L164
.L169:
	ldr	r3, .L171+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmplt
	mov	r3, r0
	cmp	r3, #0
	bne	.L161
	ldr	r3, .L171+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L170
.L161:
	mvn	r3, #0
	b	.L164
.L170:
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_d2iz
	mov	r3, r0
.L164:
	ldr	r2, .L171
	ldr	r1, [r2]
	ldr	r2, [fp, #-16]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L165
	bl	__stack_chk_fail
.L165:
	mov	r0, r3
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L172:
	.align	2
.L171:
	.word	.LC27
	.word	.LC25
	.word	step_time_us
	.word	.LC26
	.word	servo_max_ticks
	.word	servo_min_ticks
	.word	1079574528
	.word	servowidth
	.size	parse_width, .-parse_width
	.section	.rodata
	.align	2
.LC28:
	.ascii	"%d-%d=%s\000"
	.align	2
.LC29:
	.ascii	"Bad input: %s\000"
	.align	2
.LC30:
	.ascii	"Invalid header P%d\012\000"
	.align	2
.LC31:
	.ascii	"Invalid pin number P%d-%d\012\000"
	.align	2
.LC32:
	.ascii	"P%d-%d is not mapped to a servo\012\000"
	.align	2
.LC33:
	.ascii	"Invalid width specified\012\000"
	.align	2
.LC34:
	.ascii	"%d=%s\000"
	.align	2
.LC35:
	.ascii	"debug\012\000"
	.align	2
.LC36:
	.ascii	"Invalid servo number %d\012\000"
	.align	2
.LC37:
	.ascii	"Servo %d is not mapped to a GPIO pin\012\000"
	.align	2
.LC38:
	.ascii	"Input too long\012\000"
	.align	2
.LC39:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	go_go_go, %function
go_go_go:
	@ args = 0, pretend = 0, frame = 248
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #256
	ldr	r3, .L206
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-236]
	ldr	r1, .L206+4
	ldr	r0, .L206+8
	bl	open
	str	r0, [fp, #-228]
	ldr	r3, [fp, #-228]
	cmn	r3, #1
	bne	.L203
	ldr	r1, .L206+8
	ldr	r0, .L206+12
	bl	fatal
.L203:
	sub	r3, fp, #200
	str	r3, [fp, #-224]
	mov	r3, #0
	str	r3, [fp, #-232]
	b	.L175
.L176:
	ldr	r3, [fp, #-224]
	ldr	r2, [fp, #-232]
	mov	r1, #0
	str	r1, [r3, r2, lsl #2]
	ldr	r3, [fp, #-232]
	add	r3, r3, #1
	str	r3, [fp, #-232]
.L175:
	ldr	r3, [fp, #-232]
	cmp	r3, #31
	bls	.L176
	ldr	r3, [fp, #-228]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	mov	r2, r3
	lsl	r3, r2, #2
	sub	r1, fp, #4
	add	r3, r1, r3
	ldr	r1, [r3, #-196]
	ldr	r3, [fp, #-228]
	rsbs	r0, r3, #0
	and	r3, r3, #31
	and	r0, r0, #31
	rsbpl	r3, r0, #0
	mov	r0, #1
	lsl	r3, r0, r3
	orr	r1, r1, r3
	lsl	r3, r2, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	str	r1, [r3, #-196]
	sub	r3, fp, #208
	mov	r0, r3
	bl	get_next_idle_timeout
	ldr	r3, [fp, #-228]
	add	r0, r3, #1
	sub	r1, fp, #200
	sub	r3, fp, #208
	str	r3, [sp]
	mov	r3, #0
	mov	r2, #0
	bl	select
	str	r0, [fp, #-220]
	ldr	r3, [fp, #-220]
	cmp	r3, #1
	bne	.L205
	b	.L179
.L202:
	ldr	r2, .L206+16
	ldr	r3, [fp, #-236]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #10
	bne	.L180
	ldr	r3, [fp, #-236]
	add	r3, r3, #1
	str	r3, [fp, #-236]
	ldr	r2, .L206+16
	ldr	r3, [fp, #-236]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	mov	r3, #0
	str	r3, [fp, #-236]
	ldr	r3, .L206+16
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #112
	beq	.L181
	ldr	r3, .L206+16
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #80
	bne	.L182
.L181:
	ldr	r0, .L206+20
	sub	r1, fp, #240
	sub	r2, fp, #244
	sub	r3, fp, #72
	str	r3, [sp]
	mov	r3, r1
	ldr	r1, .L206+24
	bl	__isoc99_sscanf
	str	r0, [fp, #-220]
	ldr	r3, [fp, #-220]
	cmp	r3, #3
	beq	.L183
	ldr	r3, .L206+28
	ldr	r3, [r3]
	ldr	r2, .L206+16
	ldr	r1, .L206+32
	mov	r0, r3
	bl	fprintf
	b	.L179
.L183:
	ldr	r3, [fp, #-244]
	cmp	r3, #1
	beq	.L185
	ldr	r3, [fp, #-244]
	cmp	r3, #5
	beq	.L185
	ldr	r3, .L206+28
	ldr	r3, [r3]
	ldr	r2, [fp, #-244]
	ldr	r1, .L206+36
	mov	r0, r3
	bl	fprintf
	b	.L184
.L185:
	ldr	r3, [fp, #-240]
	cmp	r3, #0
	ble	.L186
	ldr	r3, [fp, #-244]
	cmp	r3, #1
	bne	.L187
	ldr	r3, [fp, #-240]
	cmp	r3, #26
	bgt	.L186
.L187:
	ldr	r3, [fp, #-244]
	cmp	r3, #5
	bne	.L188
	ldr	r3, [fp, #-240]
	cmp	r3, #8
	ble	.L188
.L186:
	ldr	r3, .L206+28
	ldr	r0, [r3]
	ldr	r2, [fp, #-244]
	ldr	r3, [fp, #-240]
	ldr	r1, .L206+40
	bl	fprintf
	b	.L184
.L188:
	ldr	r3, [fp, #-244]
	cmp	r3, #1
	bne	.L189
	ldr	r3, [fp, #-240]
	ldr	r2, .L206+44
	ldrb	r3, [r2, r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L190
.L189:
	ldr	r3, [fp, #-244]
	cmp	r3, #5
	bne	.L191
	ldr	r3, [fp, #-240]
	ldr	r2, .L206+48
	ldrb	r3, [r2, r3]	@ zero_extendqisi2
	cmp	r3, #255
	bne	.L191
.L190:
	ldr	r3, .L206+28
	ldr	r0, [r3]
	ldr	r2, [fp, #-244]
	ldr	r3, [fp, #-240]
	ldr	r1, .L206+52
	bl	fprintf
	b	.L184
.L191:
	ldr	r3, [fp, #-244]
	cmp	r3, #1
	bne	.L192
	ldr	r3, [fp, #-240]
	ldr	r2, .L206+44
	ldrb	r3, [r2, r3]	@ zero_extendqisi2
	str	r3, [fp, #-248]
	b	.L193
.L192:
	ldr	r3, [fp, #-240]
	ldr	r2, .L206+48
	ldrb	r3, [r2, r3]	@ zero_extendqisi2
	str	r3, [fp, #-248]
.L193:
	ldr	r3, [fp, #-248]
	sub	r2, fp, #72
	mov	r1, r2
	mov	r0, r3
	bl	parse_width
	str	r0, [fp, #-212]
	ldr	r3, [fp, #-212]
	cmp	r3, #0
	bge	.L194
	ldr	r3, .L206+28
	ldr	r3, [r3]
	mov	r2, #24
	mov	r1, #1
	ldr	r0, .L206+56
	bl	fwrite
	b	.L179
.L194:
	ldr	r3, [fp, #-248]
	ldr	r1, [fp, #-212]
	mov	r0, r3
	bl	set_servo
	b	.L179
.L184:
	b	.L179
.L182:
	sub	r3, fp, #72
	sub	r2, fp, #248
	ldr	r1, .L206+60
	ldr	r0, .L206+16
	bl	__isoc99_sscanf
	str	r0, [fp, #-220]
	ldr	r1, .L206+64
	ldr	r0, .L206+16
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L196
	bl	do_debug
	b	.L179
.L196:
	ldr	r3, [fp, #-220]
	cmp	r3, #2
	beq	.L197
	ldr	r3, .L206+28
	ldr	r3, [r3]
	ldr	r2, .L206+16
	ldr	r1, .L206+32
	mov	r0, r3
	bl	fprintf
	b	.L179
.L197:
	ldr	r3, [fp, #-248]
	cmp	r3, #0
	blt	.L198
	ldr	r3, [fp, #-248]
	cmp	r3, #31
	ble	.L199
.L198:
	ldr	r3, .L206+28
	ldr	r3, [r3]
	ldr	r2, [fp, #-248]
	ldr	r1, .L206+68
	mov	r0, r3
	bl	fprintf
	b	.L179
.L199:
	ldr	r3, [fp, #-248]
	ldr	r2, .L206+72
	ldrb	r3, [r2, r3]	@ zero_extendqisi2
	cmp	r3, #255
	bne	.L200
	ldr	r3, .L206+28
	ldr	r3, [r3]
	ldr	r2, [fp, #-248]
	ldr	r1, .L206+76
	mov	r0, r3
	bl	fprintf
	b	.L179
.L200:
	ldr	r3, [fp, #-248]
	sub	r2, fp, #72
	mov	r1, r2
	mov	r0, r3
	bl	parse_width
	str	r0, [fp, #-216]
	ldr	r3, [fp, #-216]
	cmp	r3, #0
	bge	.L201
	ldr	r3, .L206+28
	ldr	r3, [r3]
	mov	r2, #24
	mov	r1, #1
	ldr	r0, .L206+56
	bl	fwrite
	b	.L179
.L201:
	ldr	r3, [fp, #-248]
	ldr	r1, [fp, #-216]
	mov	r0, r3
	bl	set_servo
	b	.L179
.L180:
	ldr	r3, [fp, #-236]
	add	r3, r3, #1
	str	r3, [fp, #-236]
	ldr	r3, [fp, #-236]
	cmp	r3, #125
	ble	.L179
	ldr	r3, .L206+28
	ldr	r3, [r3]
	mov	r2, #15
	mov	r1, #1
	ldr	r0, .L206+80
	bl	fwrite
	mov	r3, #0
	str	r3, [fp, #-236]
.L179:
	ldr	r3, [fp, #-236]
	ldr	r2, .L206+16
	add	r3, r3, r2
	mov	r2, #1
	mov	r1, r3
	ldr	r0, [fp, #-228]
	bl	read
	mov	r3, r0
	cmp	r3, #1
	beq	.L202
	b	.L203
.L205:
	nop
	b	.L203
.L207:
	.align	2
.L206:
	.word	.LC39
	.word	2050
	.word	.LC3
	.word	.LC13
	.word	line.7866
	.word	line.7866+1
	.word	.LC28
	.word	stderr
	.word	.LC29
	.word	.LC30
	.word	.LC31
	.word	p1pin2servo
	.word	p5pin2servo
	.word	.LC32
	.word	.LC33
	.word	.LC34
	.word	.LC35
	.word	.LC36
	.word	servo2gpio
	.word	.LC37
	.word	.LC38
	.size	go_go_go, .-go_go_go
	.section	.rodata
	.align	2
.LC40:
	.ascii	"r\000"
	.align	2
.LC41:
	.ascii	"/proc/cpuinfo\000"
	.align	2
.LC42:
	.ascii	"Unable to open /proc/cpuinfo: %m\012\000"
	.align	2
.LC43:
	.ascii	"Revision\000"
	.align	2
.LC44:
	.ascii	"servod: No 'Revision' record in /proc/cpuinfo\012\000"
	.align	2
.LC45:
	.ascii	"servod: Failed to parse Revision string\012\000"
	.align	2
.LC46:
	.ascii	"servod: Invalid board Revision\012\000"
	.align	2
.LC47:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	board_rev, %function
board_rev:
	@ args = 0, pretend = 0, frame = 152
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #152
	ldr	r3, .L223
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, .L223+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L209
	ldr	r3, .L223+4
	ldr	r3, [r3]
	b	.L220
.L209:
	ldr	r1, .L223+8
	ldr	r0, .L223+12
	bl	fopen
	str	r0, [fp, #-148]
	ldr	r3, [fp, #-148]
	cmp	r3, #0
	bne	.L212
	ldr	r0, .L223+16
	bl	fatal
	b	.L212
.L214:
	sub	r3, fp, #136
	mov	r2, #8
	ldr	r1, .L223+20
	mov	r0, r3
	bl	strncmp
	mov	r3, r0
	cmp	r3, #0
	beq	.L222
.L212:
	sub	r3, fp, #136
	ldr	r2, [fp, #-148]
	mov	r1, #128
	mov	r0, r3
	bl	fgets
	str	r0, [fp, #-144]
	ldr	r3, [fp, #-144]
	cmp	r3, #0
	bne	.L214
	b	.L213
.L222:
	nop
.L213:
	ldr	r0, [fp, #-148]
	bl	fclose
	ldr	r3, [fp, #-144]
	cmp	r3, #0
	bne	.L215
	ldr	r0, .L223+24
	bl	fatal
.L215:
	sub	r3, fp, #136
	mov	r0, r3
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #3
	sub	r2, fp, #136
	add	r3, r2, r3
	str	r3, [fp, #-140]
	sub	r3, fp, #152
	mov	r2, #16
	mov	r1, r3
	ldr	r0, [fp, #-140]
	bl	strtol
	mov	r3, r0
	ldr	r2, .L223+4
	str	r3, [r2]
	ldr	r3, [fp, #-140]
	add	r2, r3, #2
	ldr	r3, [fp, #-152]
	cmp	r2, r3
	beq	.L216
	ldr	r0, .L223+28
	bl	fatal
.L216:
	ldr	r3, .L223+4
	ldr	r3, [r3]
	cmp	r3, #0
	bgt	.L217
	ldr	r0, .L223+32
	bl	fatal
	b	.L218
.L217:
	ldr	r3, .L223+4
	ldr	r3, [r3]
	cmp	r3, #3
	bgt	.L219
	ldr	r3, .L223+4
	mov	r2, #1
	str	r2, [r3]
	b	.L218
.L219:
	ldr	r3, .L223+4
	mov	r2, #2
	str	r2, [r3]
.L218:
	ldr	r3, .L223+4
	ldr	r3, [r3]
.L220:
	ldr	r2, .L223
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L221
	bl	__stack_chk_fail
.L221:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L224:
	.align	2
.L223:
	.word	.LC47
	.word	rev.7893
	.word	.LC40
	.word	.LC41
	.word	.LC42
	.word	.LC43
	.word	.LC44
	.word	.LC45
	.word	.LC46
	.size	board_rev, .-board_rev
	.section	.rodata
	.align	2
.LC48:
	.ascii	"P1\000"
	.align	2
.LC49:
	.ascii	"P5\000"
	.align	2
.LC50:
	.ascii	"Invalid character '%c' in %s pin list\012\000"
	.align	2
.LC51:
	.ascii	"Invalid pin number %d in %s pin list\012\000"
	.align	2
.LC52:
	.ascii	"Too many servos specified\012\000"
	.align	2
.LC53:
	.ascii	"Pin %d on header %s cannot be used for a servo outp"
	.ascii	"ut\012\000"
	.align	2
.LC54:
	.ascii	"w\000"
	.align	2
.LC55:
	.ascii	"p1pins=%s\012p5pins=%s\012\000"
	.align	2
.LC56:
	.ascii	"p5pins=%s\012p1pins=%s\012\000"
	.align	2
.LC57:
	.ascii	"\012Servo mapping:\012\000"
	.align	2
.LC58:
	.ascii	"    %2d on %-5s          GPIO-%d\012\000"
	.align	2
.LC59:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_pin_lists, %function
parse_pin_lists:
	@ args = 0, pretend = 0, frame = 64
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #72
	str	r0, [fp, #-56]
	str	r1, [fp, #-60]
	str	r2, [fp, #-64]
	ldr	r3, .L255
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r2, #32
	mov	r1, #255
	ldr	r0, .L255+4
	bl	memset
	mov	r2, #27
	mov	r1, #255
	ldr	r0, .L255+8
	bl	memset
	mov	r2, #9
	mov	r1, #255
	ldr	r0, .L255+12
	bl	memset
	mov	r3, #0
	str	r3, [fp, #-24]
	b	.L226
.L244:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L227
	ldr	r3, [fp, #-56]
	cmp	r3, #0
	beq	.L227
	ldr	r3, .L255+16
	str	r3, [fp, #-48]
	ldr	r3, [fp, #-60]
	str	r3, [fp, #-44]
	bl	board_rev
	mov	r3, r0
	cmp	r3, #1
	bne	.L228
	ldr	r3, .L255+20
	str	r3, [fp, #-32]
	mov	r3, #26
	str	r3, [fp, #-36]
	b	.L229
.L228:
	ldr	r3, .L255+24
	str	r3, [fp, #-32]
	mov	r3, #26
	str	r3, [fp, #-36]
.L229:
	ldr	r3, .L255+8
	str	r3, [fp, #-28]
	b	.L230
.L227:
	ldr	r3, .L255+28
	str	r3, [fp, #-48]
	ldr	r3, [fp, #-64]
	str	r3, [fp, #-44]
	bl	board_rev
	mov	r3, r0
	cmp	r3, #1
	bne	.L231
	ldr	r3, .L255+32
	str	r3, [fp, #-32]
	mov	r3, #8
	str	r3, [fp, #-36]
	b	.L232
.L231:
	ldr	r3, .L255+36
	str	r3, [fp, #-32]
	mov	r3, #8
	str	r3, [fp, #-36]
.L232:
	ldr	r3, .L255+12
	str	r3, [fp, #-28]
.L230:
	b	.L233
.L243:
	sub	r3, fp, #52
	mov	r2, #0
	mov	r1, r3
	ldr	r0, [fp, #-44]
	bl	strtol
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-52]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L234
	ldr	r3, [fp, #-52]
	ldr	r2, [fp, #-44]
	cmp	r2, r3
	beq	.L235
	ldr	r3, [fp, #-52]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #44
	beq	.L234
.L235:
	ldr	r3, [fp, #-52]
	ldrb	r3, [r3]	@ zero_extendqisi2
	ldr	r2, [fp, #-48]
	mov	r1, r3
	ldr	r0, .L255+40
	bl	fatal
.L234:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	blt	.L236
	ldr	r2, [fp, #-12]
	ldr	r3, [fp, #-36]
	cmp	r2, r3
	ble	.L237
.L236:
	ldr	r2, [fp, #-48]
	ldr	r1, [fp, #-12]
	ldr	r0, .L255+44
	bl	fatal
.L237:
	ldr	r3, [fp, #-20]
	cmp	r3, #32
	bne	.L238
	ldr	r0, .L255+48
	bl	fatal
.L238:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L239
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
	b	.L240
.L239:
	ldr	r3, [fp, #-12]
	sub	r3, r3, #1
	ldr	r2, [fp, #-32]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	bne	.L241
	ldr	r2, [fp, #-48]
	ldr	r1, [fp, #-12]
	ldr	r0, .L255+52
	bl	fatal
.L241:
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-28]
	add	r3, r2, r3
	ldr	r2, [fp, #-20]
	and	r2, r2, #255
	strb	r2, [r3]
	ldr	r3, [fp, #-12]
	sub	r3, r3, #1
	ldr	r2, [fp, #-32]
	add	r2, r2, r3
	ldr	r3, [fp, #-20]
	add	r1, r3, #1
	str	r1, [fp, #-20]
	ldrb	r1, [r2]	@ zero_extendqisi2
	ldr	r2, .L255+4
	strb	r1, [r2, r3]
	ldr	r3, .L255+56
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L255+56
	str	r3, [r2]
.L240:
	ldr	r3, [fp, #-52]
	str	r3, [fp, #-44]
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #44
	bne	.L233
	ldr	r3, [fp, #-44]
	add	r3, r3, #1
	str	r3, [fp, #-44]
.L233:
	ldr	r3, [fp, #-44]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	bne	.L243
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L226:
	ldr	r3, [fp, #-24]
	cmp	r3, #1
	ble	.L244
	ldr	r1, .L255+60
	ldr	r0, .L255+64
	bl	fopen
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	beq	.L253
	ldr	r3, [fp, #-56]
	cmp	r3, #0
	beq	.L246
	ldr	r3, [fp, #-64]
	ldr	r2, [fp, #-60]
	ldr	r1, .L255+68
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L247
.L246:
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-64]
	ldr	r1, .L255+72
	ldr	r0, [fp, #-16]
	bl	fprintf
.L247:
	ldr	r3, [fp, #-16]
	mov	r2, #16
	mov	r1, #1
	ldr	r0, .L255+76
	bl	fwrite
	mov	r3, #0
	str	r3, [fp, #-40]
	b	.L248
.L251:
	ldr	r2, .L255+4
	ldr	r3, [fp, #-40]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L254
	ldr	r2, .L255+4
	ldr	r3, [fp, #-40]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r0, r3
	bl	gpio2pinname
	mov	r2, r0
	ldr	r1, .L255+4
	ldr	r3, [fp, #-40]
	add	r3, r1, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	str	r3, [sp]
	mov	r3, r2
	ldr	r2, [fp, #-40]
	ldr	r1, .L255+80
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L250
.L254:
	nop
.L250:
	ldr	r3, [fp, #-40]
	add	r3, r3, #1
	str	r3, [fp, #-40]
.L248:
	ldr	r3, [fp, #-40]
	cmp	r3, #31
	ble	.L251
	ldr	r0, [fp, #-16]
	bl	fclose
.L253:
	nop
	ldr	r3, .L255
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L252
	bl	__stack_chk_fail
.L252:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L256:
	.align	2
.L255:
	.word	.LC59
	.word	servo2gpio
	.word	p1pin2servo
	.word	p5pin2servo
	.word	.LC48
	.word	rev1_p1pin2gpio_map
	.word	rev2_p1pin2gpio_map
	.word	.LC49
	.word	rev1_p5pin2gpio_map
	.word	rev2_p5pin2gpio_map
	.word	.LC50
	.word	.LC51
	.word	.LC52
	.word	.LC53
	.word	num_servos
	.word	.LC54
	.word	.LC4
	.word	.LC55
	.word	.LC56
	.word	.LC57
	.word	.LC58
	.size	parse_pin_lists, .-parse_pin_lists
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpiosearch, %function
gpiosearch:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	mov	r3, r0
	str	r1, [fp, #-12]
	str	r2, [fp, #-16]
	strb	r3, [fp, #-5]
	b	.L258
.L260:
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-12]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	ldrb	r2, [fp, #-5]	@ zero_extendqisi2
	cmp	r2, r3
	bne	.L258
	ldr	r3, [fp, #-16]
	and	r3, r3, #255
	add	r3, r3, #1
	and	r3, r3, #255
	b	.L259
.L258:
	ldr	r3, [fp, #-16]
	sub	r3, r3, #1
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L260
	mov	r3, #0
.L259:
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	gpiosearch, .-gpiosearch
	.section	.rodata
	.align	2
.LC60:
	.ascii	"P1-%d\000"
	.align	2
.LC61:
	.ascii	"P5-%d\000"
	.align	2
.LC62:
	.ascii	"Cannot map GPIO %d to a header pin\012\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio2pinname, %function
gpio2pinname:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	mov	r3, r0
	strb	r3, [fp, #-13]
	bl	board_rev
	mov	r3, r0
	cmp	r3, #1
	bne	.L262
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r2, #26
	ldr	r1, .L269
	mov	r0, r3
	bl	gpiosearch
	mov	r3, r0
	strb	r3, [fp, #-5]
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L263
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r1, .L269+4
	ldr	r0, .L269+8
	bl	sprintf
	b	.L264
.L263:
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r2, #8
	ldr	r1, .L269+12
	mov	r0, r3
	bl	gpiosearch
	mov	r3, r0
	strb	r3, [fp, #-5]
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L265
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r1, .L269+16
	ldr	r0, .L269+8
	bl	sprintf
	b	.L264
.L265:
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r1, r3
	ldr	r0, .L269+20
	bl	fatal
	b	.L264
.L262:
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r2, #26
	ldr	r1, .L269+24
	mov	r0, r3
	bl	gpiosearch
	mov	r3, r0
	strb	r3, [fp, #-5]
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L266
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r1, .L269+4
	ldr	r0, .L269+8
	bl	sprintf
	b	.L264
.L266:
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r2, #8
	ldr	r1, .L269+28
	mov	r0, r3
	bl	gpiosearch
	mov	r3, r0
	strb	r3, [fp, #-5]
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L267
	ldrb	r3, [fp, #-5]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r1, .L269+16
	ldr	r0, .L269+8
	bl	sprintf
	b	.L264
.L267:
	ldrb	r3, [fp, #-13]	@ zero_extendqisi2
	mov	r1, r3
	ldr	r0, .L269+20
	bl	fatal
.L264:
	ldr	r3, .L269+8
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L270:
	.align	2
.L269:
	.word	rev1_p1pin2gpio_map
	.word	.LC60
	.word	res.7935
	.word	rev1_p5pin2gpio_map
	.word	.LC61
	.word	.LC62
	.word	rev2_p1pin2gpio_map
	.word	rev2_p5pin2gpio_map
	.size	gpio2pinname, .-gpio2pinname
	.section	.rodata
	.align	2
.LC63:
	.ascii	"Invalid %s value specified\012\000"
	.global	__aeabi_idivmod
	.align	2
.LC64:
	.ascii	"%s value is not a multiple of step-time\012\000"
	.align	2
.LC65:
	.ascii	"%s value must be between 0% and 100% inclusive\012\000"
	.align	2
.LC66:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_min_max_arg, %function
parse_min_max_arg:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #32
	str	r0, [fp, #-40]
	str	r1, [fp, #-44]
	ldr	r3, .L293
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	sub	r3, fp, #32
	mov	r1, r3
	ldr	r0, [fp, #-40]
	bl	strtod
	str	r0, [fp, #-28]
	str	r1, [fp, #-24]
	ldr	r3, [fp, #-40]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L272
	ldr	r3, [fp, #-40]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bhi	.L272
	mov	r2, #0
	mov	r3, #0
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmplt
	mov	r3, r0
	cmp	r3, #0
	beq	.L292
.L272:
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+4
	bl	fatal
	b	.L275
.L292:
	ldr	r3, [fp, #-32]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	bne	.L276
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	floor
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpeq
	mov	r3, r0
	cmp	r3, #0
	bne	.L277
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+4
	bl	fatal
.L277:
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_d2iz
	mov	r3, r0
	b	.L288
.L276:
	ldr	r3, [fp, #-32]
	ldr	r1, .L293+8
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L280
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	floor
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpeq
	mov	r3, r0
	cmp	r3, #0
	bne	.L281
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+4
	bl	fatal
.L281:
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_d2iz
	mov	r2, r0
	ldr	r3, .L293+12
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, r2
	bl	__aeabi_idivmod
	mov	r3, r1
	cmp	r3, #0
	beq	.L283
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+16
	bl	fatal
.L283:
	ldr	r3, .L293+12
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_ddiv
	mov	r2, r0
	mov	r3, r1
	mov	r0, r2
	mov	r1, r3
	bl	__aeabi_d2iz
	mov	r3, r0
	b	.L288
.L280:
	ldr	r3, [fp, #-32]
	ldr	r1, .L293+20
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L284
	mov	r2, #0
	mov	r3, #0
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmplt
	mov	r3, r0
	cmp	r3, #0
	bne	.L285
	mov	r2, #0
	ldr	r3, .L293+24
	sub	r1, fp, #28
	ldmia	r1, {r0-r1}
	bl	__aeabi_dcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L286
.L285:
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+28
	bl	fatal
.L286:
	ldr	r3, .L293+32
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	sub	r3, fp, #28
	ldmia	r3, {r2-r3}
	bl	__aeabi_dmul
	mov	r2, r0
	mov	r3, r1
	mov	r0, r2
	mov	r1, r3
	mov	r2, #0
	ldr	r3, .L293+24
	bl	__aeabi_ddiv
	mov	r2, r0
	mov	r3, r1
	mov	r4, r2
	mov	r5, r3
	ldr	r3, .L293+12
	ldr	r3, [r3]
	mov	r0, r3
	bl	__aeabi_i2d
	mov	r2, r0
	mov	r3, r1
	mov	r0, r4
	mov	r1, r5
	bl	__aeabi_ddiv
	mov	r2, r0
	mov	r3, r1
	mov	r0, r2
	mov	r1, r3
	bl	__aeabi_d2iz
	mov	r3, r0
	b	.L288
.L284:
	ldr	r1, [fp, #-44]
	ldr	r0, .L293+4
	bl	fatal
.L275:
	mvn	r3, #0
.L288:
	ldr	r2, .L293
	ldr	r1, [r2]
	ldr	r2, [fp, #-16]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L289
	bl	__stack_chk_fail
.L289:
	mov	r0, r3
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L294:
	.align	2
.L293:
	.word	.LC66
	.word	.LC63
	.word	.LC25
	.word	step_time_us
	.word	.LC64
	.word	.LC26
	.word	1079574528
	.word	.LC65
	.word	cycle_time_us
	.size	parse_min_max_arg, .-parse_min_max_arg
	.section	.rodata
	.align	2
.LC67:
	.ascii	"mxhnt:15icsfd\000"
	.align	2
.LC68:
	.ascii	"\012Usage: %s <options>\012\012Options:\012  --pcm "
	.ascii	"              tells servod to use PCM rather than P"
	.ascii	"WM hardware\012                      to implement d"
	.ascii	"elays\012  --idle-timeout=Nms  tells servod to stop"
	.ascii	" sending servo pulses for a\012                    "
	.ascii	"  given output N milliseconds after the last update"
	.ascii	"\012  --cycle-time=Nus    Control pulse cycle time "
	.ascii	"in microseconds, default\012                      %"
	.ascii	"dus\012  --step-size=Nus     Pulse width increment "
	.ascii	"step size in microseconds,\012                     "
	.ascii	" default %dus\012  --min={N|Nus|N%%}    specifies t"
	.ascii	"he minimum allowed pulse width, default\012        "
	.ascii	"              %d steps or %dus\012  --max={N|Nus|N%"
	.ascii	"%}    specifies the maximum allowed pulse width, de"
	.ascii	"fault\012                      %d steps or %dus\012"
	.ascii	"  --invert            Inverts outputs\012  --dma-ch"
	.ascii	"an=N        tells servod which dma channel to use, "
	.ascii	"default %d\012  --p1pins=<list>     tells servod wh"
	.ascii	"ich pins on the P1 header to use\012  --p5pins=<lis"
	.ascii	"t>     tells servod which pins on the P5 header to "
	.ascii	"use\012\012where <list> defaults to \"%s\" for p1pi"
	.ascii	"ns and\012\"%s\" for p5pins.  p5pins is only valid "
	.ascii	"on rev 2 boards.\012\012min and max values can be s"
	.ascii	"pecified in units of steps, in microseconds,\012or "
	.ascii	"as a percentage of the cycle time.  So, for example"
	.ascii	", if cycle time is\01220000us and step size is 10us"
	.ascii	" then the following are equivalent:\012\012        "
	.ascii	"  --min=50   --min=500us    --min=2.5%%\012\012For "
	.ascii	"the default configuration, example commands to set "
	.ascii	"the first servo\012to the mid position would be any"
	.ascii	" of:\012\012  echo 0=150 > /dev/servoblaster       "
	.ascii	" # Specify as a number of steps\012  echo 0=50%% > "
	.ascii	"/dev/servoblaster        # Specify as a percentage\012"
	.ascii	"  echo 0=1500us > /dev/servoblaster     # Specify a"
	.ascii	"s microseconds\012  echo P1-7=150 > /dev/servoblast"
	.ascii	"er     # Using P1 pin number rather\012  echo P1-7="
	.ascii	"50%% > /dev/servoblaster     # ... than servo numbe"
	.ascii	"r\012  echo P1-7=1500us > /dev/servoblaster\012\012"
	.ascii	"Servo adjustments may also be specified relative to"
	.ascii	" the current\012position by adding a '+' or '-' pre"
	.ascii	"fix to the width as follows:\012\012  echo 0=+10 > "
	.ascii	"/dev/servoblaster\012  echo 0=-20 > /dev/s"
	.ascii	"ervoblaster\012\012\000"
	.align	2
.LC69:
	.ascii	"Invalid parameter\012\000"
	.align	2
.LC70:
	.ascii	"Board rev 1 does not have a P5 header\012\000"
	.align	2
.LC71:
	.ascii	"Invalid dma-chan specified\012\000"
	.align	2
.LC72:
	.ascii	"ms\000"
	.align	2
.LC73:
	.ascii	"Invalid idle-timeout specified\012\000"
	.align	2
.LC74:
	.ascii	"Invalid cycle-time specified\012\000"
	.align	2
.LC75:
	.ascii	"Invalid step-size specified\012\000"
	.align	2
.LC76:
	.ascii	"cycle-time is not a multiple of step-size\012\000"
	.align	2
.LC77:
	.ascii	"cycle-time must be at least 100 * step-size\012\000"
	.align	2
.LC78:
	.ascii	"min\000"
	.align	2
.LC79:
	.ascii	"max\000"
	.align	2
.LC80:
	.ascii	"Using too much memory; reduce cycle-time or increas"
	.ascii	"e step-size\012\000"
	.align	2
.LC81:
	.ascii	"max value is larger than cycle time\012\000"
	.align	2
.LC82:
	.ascii	"min value is >= max value\012\000"
	.align	2
.LC83:
	.ascii	"\012Board revision:            %7d\012\000"
	.align	2
.LC84:
	.ascii	"PWM\000"
	.align	2
.LC85:
	.ascii	"PCM\000"
	.align	2
.LC86:
	.ascii	"Using hardware:                %s\012\000"
	.align	2
.LC87:
	.ascii	"Using DMA channel:         %7d\012\000"
	.align	2
.LC88:
	.ascii	"Idle timeout:              %7dms\012\000"
	.align	2
.LC89:
	.ascii	"Idle timeout:             Disabled\000"
	.align	2
.LC90:
	.ascii	"Number of servos:          %7d\012\000"
	.align	2
.LC91:
	.ascii	"Servo cycle time:          %7dus\012\000"
	.align	2
.LC92:
	.ascii	"Pulse increment step size: %7dus\012\000"
	.align	2
.LC93:
	.ascii	"Minimum width value:       %7d (%dus)\012\000"
	.align	2
.LC94:
	.ascii	"Maximum width value:       %7d (%dus)\012\000"
	.align	2
.LC95:
	.ascii	"Inverted\000"
	.align	2
.LC96:
	.ascii	"  Normal\000"
	.align	2
.LC97:
	.ascii	"Output levels:            %s\012\000"
	.align	2
.LC98:
	.ascii	"\012Using P1 pins:               %s\012\000"
	.align	2
.LC99:
	.ascii	"Using P5 pins:               %s\012\000"
	.align	2
.LC100:
	.ascii	"\012Servo mapping:\000"
	.align	2
.LC101:
	.ascii	"servod: Failed to mmap for cached pages: %m\012\000"
	.align	2
.LC102:
	.ascii	"servod: Virtual address is not page aligned\012\000"
	.align	2
.LC103:
	.ascii	"servod: Failed to mmap uncached pages: %m\012\000"
	.align	2
.LC104:
	.ascii	"servod: Failed to create %s: %m\012\000"
	.align	2
.LC105:
	.ascii	"servod: Failed to set permissions on %s: %m\012\000"
	.align	2
.LC106:
	.ascii	"servod: Failed to daemonize process: %m\012\000"
	.align	2
.LC107:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	main
	.syntax unified
	.arm
	.fpu softvfp
	.type	main, %function
main:
	@ args = 0, pretend = 0, frame = 72
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #104
	str	r0, [fp, #-72]
	str	r1, [fp, #-76]
	ldr	r3, .L363
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, .L363+4
	ldr	r3, [r3]
	str	r3, [fp, #-60]
	ldr	r3, .L363+8
	ldr	r3, [r3]
	str	r3, [fp, #-56]
	mov	r3, #1
	str	r3, [fp, #-52]
	mov	r3, #0
	str	r3, [fp, #-48]
	mov	r3, #0
	str	r3, [fp, #-44]
	mov	r3, #0
	str	r3, [fp, #-40]
	mov	r3, #0
	str	r3, [fp, #-36]
	mov	r3, #0
	str	r3, [fp, #-32]
	mov	r3, #0
	str	r3, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r3, #1
	str	r3, [fp, #-16]
	ldr	r3, .L363+12
	ldr	r0, [r3]
	mov	r3, #0
	mov	r2, #1
	mov	r1, #0
	bl	setvbuf
.L312:
	sub	r3, fp, #68
	str	r3, [sp]
	ldr	r3, .L363+16
	ldr	r2, .L363+20
	ldr	r1, [fp, #-76]
	ldr	r0, [fp, #-72]
	bl	getopt_long
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmn	r3, #1
	bne	.L296
	bl	board_rev
	mov	r3, r0
	cmp	r3, #1
	beq	.L297
	b	.L298
.L296:
	ldr	r3, [fp, #-12]
	cmp	r3, #100
	bne	.L299
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-20]
	b	.L312
.L299:
	ldr	r3, [fp, #-12]
	cmp	r3, #102
	bne	.L301
	mov	r3, #0
	str	r3, [fp, #-16]
	b	.L312
.L301:
	ldr	r3, [fp, #-12]
	cmp	r3, #112
	bne	.L302
	ldr	r3, .L363+28
	mov	r2, #1
	str	r2, [r3]
	b	.L312
.L302:
	ldr	r3, [fp, #-12]
	cmp	r3, #116
	bne	.L303
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-32]
	b	.L312
.L303:
	ldr	r3, [fp, #-12]
	cmp	r3, #99
	bne	.L304
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-28]
	b	.L312
.L304:
	ldr	r3, [fp, #-12]
	cmp	r3, #115
	bne	.L305
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-24]
	b	.L312
.L305:
	ldr	r3, [fp, #-12]
	cmp	r3, #109
	bne	.L306
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-40]
	b	.L312
.L306:
	ldr	r3, [fp, #-12]
	cmp	r3, #120
	bne	.L307
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-36]
	b	.L312
.L307:
	ldr	r3, [fp, #-12]
	cmp	r3, #105
	bne	.L308
	ldr	r3, .L363+32
	mov	r2, #1
	str	r2, [r3]
	b	.L312
.L308:
	ldr	r3, [fp, #-12]
	cmp	r3, #104
	bne	.L309
	ldr	r3, [fp, #-76]
	ldr	r1, [r3]
	ldr	r3, .L363+4
	ldr	r3, [r3]
	ldr	r2, .L363+8
	ldr	r2, [r2]
	str	r2, [sp, #24]
	str	r3, [sp, #20]
	mov	r3, #14
	str	r3, [sp, #16]
	ldr	r3, .L363+36
	str	r3, [sp, #12]
	mov	r3, #250
	str	r3, [sp, #8]
	mov	r3, #500
	str	r3, [sp, #4]
	mov	r3, #50
	str	r3, [sp]
	mov	r3, #10
	ldr	r2, .L363+40
	ldr	r0, .L363+44
	bl	printf
	mov	r0, #0
	bl	exit
.L309:
	ldr	r3, [fp, #-12]
	cmp	r3, #49
	bne	.L310
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-60]
	mov	r3, #1
	str	r3, [fp, #-48]
	ldr	r3, [fp, #-44]
	cmp	r3, #0
	bne	.L312
	mov	r3, #1
	str	r3, [fp, #-52]
	b	.L312
.L310:
	ldr	r3, [fp, #-12]
	cmp	r3, #53
	bne	.L311
	ldr	r3, .L363+24
	ldr	r3, [r3]
	str	r3, [fp, #-56]
	mov	r3, #1
	str	r3, [fp, #-44]
	ldr	r3, [fp, #-48]
	cmp	r3, #0
	bne	.L312
	mov	r3, #0
	str	r3, [fp, #-52]
	b	.L312
.L311:
	ldr	r0, .L363+48
	bl	fatal
	b	.L312
.L297:
	ldr	r3, [fp, #-56]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L298
	ldr	r0, .L363+52
	bl	fatal
.L298:
	ldr	r2, [fp, #-56]
	ldr	r1, [fp, #-60]
	ldr	r0, [fp, #-52]
	bl	parse_pin_lists
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	beq	.L313
	sub	r3, fp, #68
	mov	r2, #10
	mov	r1, r3
	ldr	r0, [fp, #-20]
	bl	strtol
	mov	r3, r0
	ldr	r2, .L363+56
	str	r3, [r2]
	ldr	r3, [fp, #-20]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L314
	ldr	r3, [fp, #-20]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bhi	.L314
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	bne	.L314
	ldr	r3, .L363+56
	ldr	r3, [r3]
	cmp	r3, #0
	blt	.L314
	ldr	r3, .L363+56
	ldr	r3, [r3]
	cmp	r3, #14
	ble	.L315
.L314:
	ldr	r0, .L363+60
	bl	fatal
	b	.L315
.L313:
	ldr	r3, .L363+56
	mov	r2, #14
	str	r2, [r3]
.L315:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L316
	sub	r3, fp, #68
	mov	r2, #10
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	strtol
	mov	r3, r0
	ldr	r2, .L363+64
	str	r3, [r2]
	ldr	r3, [fp, #-32]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L317
	ldr	r3, [fp, #-32]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bhi	.L317
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L318
	ldr	r3, [fp, #-68]
	ldr	r1, .L363+68
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L317
.L318:
	ldr	r3, .L363+64
	ldr	r3, [r3]
	cmp	r3, #9
	ble	.L317
	ldr	r3, .L363+64
	ldr	r3, [r3]
	ldr	r2, .L363+72
	cmp	r3, r2
	ble	.L319
.L317:
	ldr	r0, .L363+76
	bl	fatal
	b	.L319
.L316:
	ldr	r3, .L363+64
	mov	r2, #0
	str	r2, [r3]
.L319:
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L320
	sub	r3, fp, #68
	mov	r2, #10
	mov	r1, r3
	ldr	r0, [fp, #-28]
	bl	strtol
	mov	r3, r0
	ldr	r2, .L363+80
	str	r3, [r2]
	ldr	r3, [fp, #-28]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L321
	ldr	r3, [fp, #-28]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bhi	.L321
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L322
	ldr	r3, [fp, #-68]
	ldr	r1, .L363+84
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L321
.L322:
	ldr	r3, .L363+80
	ldr	r3, [r3]
	cmp	r3, #1000
	blt	.L321
	ldr	r3, .L363+80
	ldr	r3, [r3]
	ldr	r2, .L363+88
	cmp	r3, r2
	ble	.L323
.L321:
	ldr	r0, .L363+92
	bl	fatal
	b	.L323
.L320:
	ldr	r3, .L363+80
	ldr	r2, .L363+40
	str	r2, [r3]
.L323:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L324
	sub	r3, fp, #68
	mov	r2, #10
	mov	r1, r3
	ldr	r0, [fp, #-24]
	bl	strtol
	mov	r3, r0
	ldr	r2, .L363+96
	str	r3, [r2]
	ldr	r3, [fp, #-24]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #47
	bls	.L325
	ldr	r3, [fp, #-24]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #57
	bhi	.L325
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L326
	ldr	r3, [fp, #-68]
	ldr	r1, .L363+84
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L325
.L326:
	ldr	r3, .L363+96
	ldr	r3, [r3]
	cmp	r3, #0
	ble	.L325
	ldr	r3, .L363+96
	ldr	r3, [r3]
	cmp	r3, #1000
	ble	.L327
.L325:
	ldr	r0, .L363+100
	bl	fatal
	b	.L327
.L324:
	ldr	r3, .L363+96
	mov	r2, #10
	str	r2, [r3]
.L327:
	ldr	r3, .L363+80
	ldr	r3, [r3]
	ldr	r2, .L363+96
	ldr	r2, [r2]
	mov	r1, r2
	mov	r0, r3
	bl	__aeabi_idivmod
	mov	r3, r1
	cmp	r3, #0
	beq	.L328
	ldr	r0, .L363+104
	bl	fatal
.L328:
	ldr	r3, .L363+80
	ldr	r3, [r3]
	ldr	r2, .L363+96
	ldr	r2, [r2]
	mov	r1, r2
	mov	r0, r3
	bl	__aeabi_idiv
	mov	r3, r0
	cmp	r3, #99
	bgt	.L329
	ldr	r0, .L363+108
	bl	fatal
.L329:
	ldr	r3, [fp, #-40]
	cmp	r3, #0
	beq	.L330
	ldr	r1, .L363+112
	ldr	r0, [fp, #-40]
	bl	parse_min_max_arg
	mov	r3, r0
	ldr	r2, .L363+116
	str	r3, [r2]
	b	.L331
.L330:
	ldr	r3, .L363+96
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, #500
	bl	__aeabi_idiv
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L363+116
	str	r2, [r3]
.L331:
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	beq	.L332
	ldr	r1, .L363+120
	ldr	r0, [fp, #-36]
	bl	parse_min_max_arg
	mov	r3, r0
	ldr	r2, .L363+124
	str	r3, [r2]
	b	.L333
.L332:
	ldr	r3, .L363+96
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+36
	bl	__aeabi_idiv
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L363+124
	str	r2, [r3]
.L333:
	ldr	r3, .L363+80
	ldr	r3, [r3]
	ldr	r2, .L363+96
	ldr	r2, [r2]
	mov	r1, r2
	mov	r0, r3
	bl	__aeabi_idiv
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L363+128
	str	r2, [r3]
	ldr	r3, .L363+128
	ldr	r3, [r3]
	add	r3, r3, #16
	lsl	r3, r3, #1
	ldr	r2, .L363+132
	str	r3, [r2]
	ldr	r3, .L363+132
	ldr	r3, [r3]
	lsl	r3, r3, #5
	ldr	r2, .L363+128
	ldr	r2, [r2]
	lsl	r2, r2, #2
	add	r3, r3, r2
	add	r3, r3, #4160
	add	r3, r3, #63
	lsr	r3, r3, #12
	mov	r2, r3
	ldr	r3, .L363+136
	str	r2, [r3]
	ldr	r3, .L363+136
	ldr	r3, [r3]
	cmp	r3, #4096
	ble	.L334
	ldr	r0, .L363+140
	bl	fatal
.L334:
	ldr	r3, .L363+124
	ldr	r2, [r3]
	ldr	r3, .L363+128
	ldr	r3, [r3]
	cmp	r2, r3
	ble	.L335
	ldr	r0, .L363+144
	bl	fatal
.L335:
	ldr	r3, .L363+116
	ldr	r2, [r3]
	ldr	r3, .L363+124
	ldr	r3, [r3]
	cmp	r2, r3
	blt	.L336
	ldr	r0, .L363+148
	bl	fatal
.L336:
	bl	board_rev
	mov	r3, r0
	mov	r1, r3
	ldr	r0, .L363+152
	bl	printf
	ldr	r3, .L363+28
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L337
	ldr	r3, .L363+156
	b	.L338
.L337:
	ldr	r3, .L363+160
.L338:
	mov	r1, r3
	ldr	r0, .L363+164
	bl	printf
	ldr	r3, .L363+56
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+168
	bl	printf
	ldr	r3, .L363+64
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L339
	ldr	r3, .L363+64
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+172
	bl	printf
	b	.L340
.L339:
	ldr	r0, .L363+176
	bl	puts
.L340:
	ldr	r3, .L363+180
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+184
	bl	printf
	ldr	r3, .L363+80
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+188
	bl	printf
	ldr	r3, .L363+96
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L363+192
	bl	printf
	ldr	r3, .L363+116
	ldr	r1, [r3]
	ldr	r3, .L363+116
	ldr	r3, [r3]
	ldr	r2, .L363+96
	ldr	r2, [r2]
	mul	r3, r2, r3
	mov	r2, r3
	ldr	r0, .L363+196
	bl	printf
	ldr	r3, .L363+124
	ldr	r1, [r3]
	ldr	r3, .L363+124
	ldr	r3, [r3]
	ldr	r2, .L363+96
	ldr	r2, [r2]
	mul	r3, r2, r3
	mov	r2, r3
	ldr	r0, .L363+200
	bl	printf
	ldr	r3, .L363+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L341
	ldr	r3, .L363+204
	b	.L342
.L341:
	ldr	r3, .L363+208
.L342:
	mov	r1, r3
	ldr	r0, .L363+212
	bl	printf
	ldr	r1, [fp, #-60]
	ldr	r0, .L363+216
	bl	printf
	bl	board_rev
	mov	r3, r0
	cmp	r3, #1
	ble	.L343
	ldr	r1, [fp, #-56]
	ldr	r0, .L363+220
	bl	printf
.L343:
	ldr	r0, .L363+224
	bl	puts
	mov	r3, #0
	str	r3, [fp, #-64]
	b	.L344
.L347:
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L361
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r0, r3
	bl	gpio2pinname
	mov	r2, r0
	ldr	r1, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r1, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	ldr	r1, [fp, #-64]
	ldr	r0, .L363+232
	bl	printf
	b	.L346
.L361:
	nop
.L346:
	ldr	r3, [fp, #-64]
	add	r3, r3, #1
	str	r3, [fp, #-64]
.L344:
	ldr	r3, [fp, #-64]
	cmp	r3, #31
	ble	.L347
	mov	r0, #10
	bl	putchar
	bl	init_idle_timers
	bl	setup_sighandlers
	mov	r1, #3840
	ldr	r0, .L363+236
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L363+240
	str	r3, [r2]
	ldr	r3, .L363+240
	ldr	r3, [r3]
	ldr	r2, .L363+56
	ldr	r2, [r2]
	lsl	r2, r2, #8
	add	r3, r3, r2
	ldr	r2, .L363+240
	str	r3, [r2]
	mov	r1, #40
	ldr	r0, .L363+244
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L363+248
	str	r3, [r2]
	mov	r1, #36
	ldr	r0, .L363+252
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L363+256
	str	r3, [r2]
	mov	r1, #168
	ldr	r0, .L363+260
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L363+264
	str	r3, [r2]
	mov	r1, #256
	ldr	r0, .L363+268
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L363+272
	str	r3, [r2]
	ldr	r3, .L363+136
	ldr	r3, [r3]
	lsl	r3, r3, #12
	mov	r1, r3
	mov	r3, #0
	str	r3, [sp, #4]
	mvn	r3, #0
	str	r3, [sp]
	ldr	r3, .L363+276
	mov	r2, #3
	mov	r0, #0
	bl	mmap
	mov	r3, r0
	ldr	r2, .L363+280
	str	r3, [r2]
	ldr	r3, .L363+280
	ldr	r3, [r3]
	cmn	r3, #1
	bne	.L348
	ldr	r0, .L363+284
	bl	fatal
.L348:
	ldr	r3, .L363+280
	ldr	r3, [r3]
	lsl	r3, r3, #20
	lsr	r3, r3, #20
	cmp	r3, #0
	beq	.L349
	ldr	r0, .L363+288
	bl	fatal
.L349:
	ldr	r3, .L363+280
	ldr	r0, [r3]
	ldr	r3, .L363+136
	ldr	r3, [r3]
	lsl	r3, r3, #12
	mov	r2, r3
	mov	r1, #0
	bl	memset
	ldr	r3, .L363+136
	ldr	r3, [r3]
	lsl	r3, r3, #12
	mov	r1, r3
	mov	r3, #0
	str	r3, [sp, #4]
	mvn	r3, #0
	str	r3, [sp]
	ldr	r3, .L363+276
	mov	r2, #3
	mov	r0, #0
	bl	mmap
	mov	r3, r0
	ldr	r2, .L363+292
	str	r3, [r2]
	ldr	r3, .L363+292
	ldr	r3, [r3]
	cmn	r3, #1
	bne	.L350
	ldr	r0, .L363+296
	bl	fatal
.L350:
	ldr	r3, .L363+292
	ldr	r3, [r3]
	lsl	r3, r3, #20
	lsr	r3, r3, #20
	cmp	r3, #0
	beq	.L351
	ldr	r0, .L363+288
	bl	fatal
.L351:
	ldr	r3, .L363+292
	ldr	r2, [r3]
	ldr	r3, .L363+136
	ldr	r3, [r3]
	lsl	r3, r3, #12
	mov	r1, r3
	mov	r0, r2
	bl	munmap
	bl	make_pagemap
	ldr	r3, .L363+292
	ldr	r3, [r3]
	ldr	r2, .L363+300
	str	r3, [r2]
	ldr	r3, .L363+292
	ldr	r2, [r3]
	ldr	r3, .L363+128
	ldr	r3, [r3]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, .L363+304
	str	r3, [r2]
	ldr	r3, .L363+292
	ldr	r2, [r3]
	ldr	r3, .L363+128
	ldr	r3, [r3]
	add	r3, r3, #39
	bic	r3, r3, #7
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, .L363+308
	str	r3, [r2]
	mov	r3, #0
	str	r3, [fp, #-64]
	b	.L352
.L355:
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #255
	beq	.L362
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r0, r3
	bl	gpio_get_mode
	mov	r2, r0
	ldr	r1, .L363+312
	ldr	r3, [fp, #-64]
	str	r2, [r1, r3, lsl #2]
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r3, .L363+32
	ldr	r3, [r3]
	cmp	r3, #0
	movne	r3, #1
	moveq	r3, #0
	and	r3, r3, #255
	mov	r1, r3
	mov	r0, r2
	bl	gpio_set
	ldr	r2, .L363+228
	ldr	r3, [fp, #-64]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r1, #1
	mov	r0, r3
	bl	gpio_set_mode
	b	.L354
.L362:
	nop
.L354:
	ldr	r3, [fp, #-64]
	add	r3, r3, #1
	str	r3, [fp, #-64]
.L352:
	ldr	r3, [fp, #-64]
	cmp	r3, #31
	ble	.L355
	ldr	r3, .L363+316
	mov	r2, #1
	str	r2, [r3]
	bl	init_ctrl_data
	bl	init_hardware
	ldr	r0, .L363+320
	bl	unlink
	ldr	r1, .L363+324
	ldr	r0, .L363+320
	bl	mkfifo
	mov	r3, r0
	cmp	r3, #0
	bge	.L356
	ldr	r1, .L363+320
	ldr	r0, .L363+328
	bl	fatal
.L356:
	ldr	r1, .L363+324
	ldr	r0, .L363+320
	bl	chmod
	mov	r3, r0
	cmp	r3, #0
	bge	.L357
	ldr	r1, .L363+320
	ldr	r0, .L363+332
	bl	fatal
.L357:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	beq	.L358
	mov	r1, #1
	mov	r0, #0
	bl	daemon
	mov	r3, r0
	cmp	r3, #0
	bge	.L358
	ldr	r0, .L363+336
	bl	fatal
.L358:
	bl	go_go_go
	mov	r3, #0
	ldr	r2, .L363
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L360
	bl	__stack_chk_fail
.L360:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L364:
	.align	2
.L363:
	.word	.LC107
	.word	default_p1_pins
	.word	default_p5_pins
	.word	stdout
	.word	long_options.7963
	.word	.LC67
	.word	optarg
	.word	delay_hw
	.word	invert
	.word	2500
	.word	20000
	.word	.LC68
	.word	.LC69
	.word	.LC70
	.word	dma_chan
	.word	.LC71
	.word	idle_timeout
	.word	.LC72
	.word	3600000
	.word	.LC73
	.word	cycle_time_us
	.word	.LC25
	.word	1000000
	.word	.LC74
	.word	step_time_us
	.word	.LC75
	.word	.LC76
	.word	.LC77
	.word	.LC78
	.word	servo_min_ticks
	.word	.LC79
	.word	servo_max_ticks
	.word	num_samples
	.word	num_cbs
	.word	num_pages
	.word	.LC80
	.word	.LC81
	.word	.LC82
	.word	.LC83
	.word	.LC84
	.word	.LC85
	.word	.LC86
	.word	.LC87
	.word	.LC88
	.word	.LC89
	.word	num_servos
	.word	.LC90
	.word	.LC91
	.word	.LC92
	.word	.LC93
	.word	.LC94
	.word	.LC95
	.word	.LC96
	.word	.LC97
	.word	.LC98
	.word	.LC99
	.word	.LC100
	.word	servo2gpio
	.word	.LC58
	.word	536899584
	.word	dma_reg
	.word	539017216
	.word	pwm_reg
	.word	538980352
	.word	pcm_reg
	.word	537923584
	.word	clk_reg
	.word	538968064
	.word	gpio_reg
	.word	24609
	.word	virtcached
	.word	.LC101
	.word	.LC102
	.word	virtbase
	.word	.LC103
	.word	turnoff_mask
	.word	turnon_mask
	.word	cb_base
	.word	gpiomode
	.word	restore_gpio_modes
	.word	.LC3
	.word	438
	.word	.LC104
	.word	.LC105
	.word	.LC106
	.size	main, .-main
	.local	line.7866
	.comm	line.7866,128,4
	.local	rev.7893
	.comm	rev.7893,4,4
	.local	res.7935
	.comm	res.7935,16,4
	.section	.rodata
	.align	2
.LC108:
	.ascii	"pcm\000"
	.align	2
.LC109:
	.ascii	"idle-timeout\000"
	.align	2
.LC110:
	.ascii	"help\000"
	.align	2
.LC111:
	.ascii	"p1pins\000"
	.align	2
.LC112:
	.ascii	"p5pins\000"
	.align	2
.LC113:
	.ascii	"invert\000"
	.align	2
.LC114:
	.ascii	"cycle-time\000"
	.align	2
.LC115:
	.ascii	"step-size\000"
	.align	2
.LC116:
	.ascii	"debug\000"
	.align	2
.LC117:
	.ascii	"dma-chan\000"
	.data
	.align	2
	.type	long_options.7963, %object
	.size	long_options.7963, 208
long_options.7963:
	.word	.LC108
	.word	0
	.word	0
	.word	112
	.word	.LC109
	.word	1
	.word	0
	.word	116
	.word	.LC110
	.word	0
	.word	0
	.word	104
	.word	.LC111
	.word	1
	.word	0
	.word	49
	.word	.LC112
	.word	1
	.word	0
	.word	53
	.word	.LC78
	.word	1
	.word	0
	.word	109
	.word	.LC79
	.word	1
	.word	0
	.word	120
	.word	.LC113
	.word	0
	.word	0
	.word	105
	.word	.LC114
	.word	1
	.word	0
	.word	99
	.word	.LC115
	.word	1
	.word	0
	.word	115
	.word	.LC116
	.word	0
	.word	0
	.word	102
	.word	.LC117
	.word	1
	.word	0
	.word	100
	.word	0
	.word	0
	.word	0
	.word	0
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
