.include "macros.inc"

.section .data
.balign 8

.global lbl_803DF700
lbl_803DF700:
	# ROM: 0x3DC700
	.4byte 0
	.4byte 0
	.4byte sub_800de904
	.4byte 0

.section .text, "ax"

.global FAiFiniteStateMachineFactory__FRC10SObjectTagR12CInputStreamRC15CVParamTransfer
FAiFiniteStateMachineFactory__FRC10SObjectTagR12CInputStreamRC15CVParamTransfer:
/* 800DE7FC 000DB75C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 800DE800 000DB760  7C 08 02 A6 */	mflr r0
/* 800DE804 000DB764  3C 80 80 3D */	lis r4, lbl_803CE528@ha
/* 800DE808 000DB768  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DE80C 000DB76C  38 84 E5 28 */	addi r4, r4, lbl_803CE528@l
/* 800DE810 000DB770  93 E1 00 0C */	stw r31, 0xc(r1)
/* 800DE814 000DB774  7C BF 2B 78 */	mr r31, r5
/* 800DE818 000DB778  38 A0 00 00 */	li r5, 0
/* 800DE81C 000DB77C  93 C1 00 08 */	stw r30, 8(r1)
/* 800DE820 000DB780  7C 7E 1B 78 */	mr r30, r3
/* 800DE824 000DB784  38 60 00 20 */	li r3, 0x20
/* 800DE828 000DB788  48 23 70 45 */	bl __nw__FUlPCcPCc
/* 800DE82C 000DB78C  7C 64 1B 79 */	or. r4, r3, r3
/* 800DE830 000DB790  41 82 00 10 */	beq lbl_800DE840
/* 800DE834 000DB794  7F E4 FB 78 */	mr r4, r31
/* 800DE838 000DB798  4B FA 0E 3D */	bl __ct__13CStateMachineFR12CInputStream
/* 800DE83C 000DB79C  7C 64 1B 78 */	mr r4, r3
lbl_800DE840:
/* 800DE840 000DB7A0  7F C3 F3 78 */	mr r3, r30
/* 800DE844 000DB7A4  48 00 00 1D */	bl "__ct<13CStateMachine>__16CFactoryFnReturnFP13CStateMachine"
/* 800DE848 000DB7A8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 800DE84C 000DB7AC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 800DE850 000DB7B0  83 C1 00 08 */	lwz r30, 8(r1)
/* 800DE854 000DB7B4  7C 08 03 A6 */	mtlr r0
/* 800DE858 000DB7B8  38 21 00 10 */	addi r1, r1, 0x10
/* 800DE85C 000DB7BC  4E 80 00 20 */	blr

.global "__ct<13CStateMachine>__16CFactoryFnReturnFP13CStateMachine"
"__ct<13CStateMachine>__16CFactoryFnReturnFP13CStateMachine":
/* 800DE860 000DB7C0  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 800DE864 000DB7C4  7C 08 02 A6 */	mflr r0
/* 800DE868 000DB7C8  90 01 00 24 */	stw r0, 0x24(r1)
/* 800DE86C 000DB7CC  7C 04 00 D0 */	neg r0, r4
/* 800DE870 000DB7D0  7C 00 23 78 */	or r0, r0, r4
/* 800DE874 000DB7D4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 800DE878 000DB7D8  54 00 0F FE */	srwi r0, r0, 0x1f
/* 800DE87C 000DB7DC  7C 7F 1B 78 */	mr r31, r3
/* 800DE880 000DB7E0  38 61 00 08 */	addi r3, r1, 8
/* 800DE884 000DB7E4  90 81 00 14 */	stw r4, 0x14(r1)
/* 800DE888 000DB7E8  38 81 00 10 */	addi r4, r1, 0x10
/* 800DE88C 000DB7EC  98 01 00 10 */	stb r0, 0x10(r1)
/* 800DE890 000DB7F0  48 00 01 E1 */	bl "GetIObjObjectFor__23TToken<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>"
/* 800DE894 000DB7F4  80 61 00 0C */	lwz r3, 0xc(r1)
/* 800DE898 000DB7F8  38 00 00 00 */	li r0, 0
/* 800DE89C 000DB7FC  98 01 00 08 */	stb r0, 8(r1)
/* 800DE8A0 000DB800  7C 03 00 D0 */	neg r0, r3
/* 800DE8A4 000DB804  7C 00 1B 78 */	or r0, r0, r3
/* 800DE8A8 000DB808  54 00 0F FE */	srwi r0, r0, 0x1f
/* 800DE8AC 000DB80C  98 1F 00 00 */	stb r0, 0(r31)
/* 800DE8B0 000DB810  90 7F 00 04 */	stw r3, 4(r31)
/* 800DE8B4 000DB814  88 01 00 08 */	lbz r0, 8(r1)
/* 800DE8B8 000DB818  28 00 00 00 */	cmplwi r0, 0
/* 800DE8BC 000DB81C  41 82 00 24 */	beq lbl_800DE8E0
/* 800DE8C0 000DB820  80 61 00 0C */	lwz r3, 0xc(r1)
/* 800DE8C4 000DB824  28 03 00 00 */	cmplwi r3, 0
/* 800DE8C8 000DB828  41 82 00 18 */	beq lbl_800DE8E0
/* 800DE8CC 000DB82C  81 83 00 00 */	lwz r12, 0(r3)
/* 800DE8D0 000DB830  38 80 00 01 */	li r4, 1
/* 800DE8D4 000DB834  81 8C 00 08 */	lwz r12, 8(r12)
/* 800DE8D8 000DB838  7D 89 03 A6 */	mtctr r12
/* 800DE8DC 000DB83C  4E 80 04 21 */	bctrl
lbl_800DE8E0:
/* 800DE8E0 000DB840  38 61 00 10 */	addi r3, r1, 0x10
/* 800DE8E4 000DB844  38 80 FF FF */	li r4, -1
/* 800DE8E8 000DB848  48 00 02 51 */	bl "__dt__Q24rstl53auto_ptr<41TObjOwnerDerivedFromIObj<13CStateMachine>>Fv"
/* 800DE8EC 000DB84C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 800DE8F0 000DB850  7F E3 FB 78 */	mr r3, r31
/* 800DE8F4 000DB854  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 800DE8F8 000DB858  7C 08 03 A6 */	mtlr r0
/* 800DE8FC 000DB85C  38 21 00 20 */	addi r1, r1, 0x20
/* 800DE900 000DB860  4E 80 00 20 */	blr

.global sub_800de904
sub_800de904:
/* 800DE904 000DB864  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 800DE908 000DB868  7C 08 02 A6 */	mflr r0
/* 800DE90C 000DB86C  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DE910 000DB870  93 E1 00 0C */	stw r31, 0xc(r1)
/* 800DE914 000DB874  7C 9F 23 78 */	mr r31, r4
/* 800DE918 000DB878  93 C1 00 08 */	stw r30, 8(r1)
/* 800DE91C 000DB87C  7C 7E 1B 79 */	or. r30, r3, r3
/* 800DE920 000DB880  41 82 00 58 */	beq lbl_800DE978
/* 800DE924 000DB884  3C 60 80 3E */	lis r3, lbl_803DF700@ha
/* 800DE928 000DB888  38 03 F7 00 */	addi r0, r3, lbl_803DF700@l
/* 800DE92C 000DB88C  90 1E 00 00 */	stw r0, 0(r30)
/* 800DE930 000DB890  80 7E 00 04 */	lwz r3, 4(r30)
/* 800DE934 000DB894  28 03 00 00 */	cmplwi r3, 0
/* 800DE938 000DB898  41 82 00 0C */	beq lbl_800DE944
/* 800DE93C 000DB89C  38 80 00 01 */	li r4, 1
/* 800DE940 000DB8A0  48 00 00 55 */	bl sub_800de994
lbl_800DE944:
/* 800DE944 000DB8A4  28 1E 00 00 */	cmplwi r30, 0
/* 800DE948 000DB8A8  41 82 00 20 */	beq lbl_800DE968
/* 800DE94C 000DB8AC  3C 60 80 3E */	lis r3, __vt__31CObjOwnerDerivedFromIObjUntyped@ha
/* 800DE950 000DB8B0  38 03 8D 78 */	addi r0, r3, __vt__31CObjOwnerDerivedFromIObjUntyped@l
/* 800DE954 000DB8B4  90 1E 00 00 */	stw r0, 0(r30)
/* 800DE958 000DB8B8  41 82 00 10 */	beq lbl_800DE968
/* 800DE95C 000DB8BC  3C 60 80 3E */	lis r3, __vt__4IObj@ha
/* 800DE960 000DB8C0  38 03 8D 6C */	addi r0, r3, __vt__4IObj@l
/* 800DE964 000DB8C4  90 1E 00 00 */	stw r0, 0(r30)
lbl_800DE968:
/* 800DE968 000DB8C8  7F E0 07 35 */	extsh. r0, r31
/* 800DE96C 000DB8CC  40 81 00 0C */	ble lbl_800DE978
/* 800DE970 000DB8D0  7F C3 F3 78 */	mr r3, r30
/* 800DE974 000DB8D4  48 23 6F BD */	bl Free__7CMemoryFPCv
lbl_800DE978:
/* 800DE978 000DB8D8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 800DE97C 000DB8DC  7F C3 F3 78 */	mr r3, r30
/* 800DE980 000DB8E0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 800DE984 000DB8E4  83 C1 00 08 */	lwz r30, 8(r1)
/* 800DE988 000DB8E8  7C 08 03 A6 */	mtlr r0
/* 800DE98C 000DB8EC  38 21 00 10 */	addi r1, r1, 0x10
/* 800DE990 000DB8F0  4E 80 00 20 */	blr

.global sub_800de994
sub_800de994:
/* 800DE994 000DB8F4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 800DE998 000DB8F8  7C 08 02 A6 */	mflr r0
/* 800DE99C 000DB8FC  90 01 00 34 */	stw r0, 0x34(r1)
/* 800DE9A0 000DB900  93 E1 00 2C */	stw r31, 0x2c(r1)
/* 800DE9A4 000DB904  7C 9F 23 78 */	mr r31, r4
/* 800DE9A8 000DB908  93 C1 00 28 */	stw r30, 0x28(r1)
/* 800DE9AC 000DB90C  7C 7E 1B 79 */	or. r30, r3, r3
/* 800DE9B0 000DB910  41 82 00 A4 */	beq lbl_800DEA54
/* 800DE9B4 000DB914  34 1E 00 10 */	addic. r0, r30, 0x10
/* 800DE9B8 000DB918  41 82 00 44 */	beq lbl_800DE9FC
/* 800DE9BC 000DB91C  80 1E 00 14 */	lwz r0, 0x14(r30)
/* 800DE9C0 000DB920  80 7E 00 1C */	lwz r3, 0x1c(r30)
/* 800DE9C4 000DB924  1C 00 00 1C */	mulli r0, r0, 0x1c
/* 800DE9C8 000DB928  90 61 00 1C */	stw r3, 0x1c(r1)
/* 800DE9CC 000DB92C  7C 64 1B 78 */	mr r4, r3
/* 800DE9D0 000DB930  7C 03 02 14 */	add r0, r3, r0
/* 800DE9D4 000DB934  90 61 00 18 */	stw r3, 0x18(r1)
/* 800DE9D8 000DB938  90 01 00 24 */	stw r0, 0x24(r1)
/* 800DE9DC 000DB93C  90 01 00 20 */	stw r0, 0x20(r1)
/* 800DE9E0 000DB940  48 00 00 08 */	b lbl_800DE9E8
lbl_800DE9E4:
/* 800DE9E4 000DB944  38 84 00 1C */	addi r4, r4, 0x1c
lbl_800DE9E8:
/* 800DE9E8 000DB948  7C 04 00 40 */	cmplw r4, r0
/* 800DE9EC 000DB94C  40 82 FF F8 */	bne lbl_800DE9E4
/* 800DE9F0 000DB950  28 03 00 00 */	cmplwi r3, 0
/* 800DE9F4 000DB954  41 82 00 08 */	beq lbl_800DE9FC
/* 800DE9F8 000DB958  48 23 6F 39 */	bl Free__7CMemoryFPCv
lbl_800DE9FC:
/* 800DE9FC 000DB95C  28 1E 00 00 */	cmplwi r30, 0
/* 800DEA00 000DB960  41 82 00 44 */	beq lbl_800DEA44
/* 800DEA04 000DB964  80 1E 00 04 */	lwz r0, 4(r30)
/* 800DEA08 000DB968  80 7E 00 0C */	lwz r3, 0xc(r30)
/* 800DEA0C 000DB96C  1C 00 00 34 */	mulli r0, r0, 0x34
/* 800DEA10 000DB970  90 61 00 0C */	stw r3, 0xc(r1)
/* 800DEA14 000DB974  7C 64 1B 78 */	mr r4, r3
/* 800DEA18 000DB978  7C 03 02 14 */	add r0, r3, r0
/* 800DEA1C 000DB97C  90 61 00 08 */	stw r3, 8(r1)
/* 800DEA20 000DB980  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DEA24 000DB984  90 01 00 10 */	stw r0, 0x10(r1)
/* 800DEA28 000DB988  48 00 00 08 */	b lbl_800DEA30
lbl_800DEA2C:
/* 800DEA2C 000DB98C  38 84 00 34 */	addi r4, r4, 0x34
lbl_800DEA30:
/* 800DEA30 000DB990  7C 04 00 40 */	cmplw r4, r0
/* 800DEA34 000DB994  40 82 FF F8 */	bne lbl_800DEA2C
/* 800DEA38 000DB998  28 03 00 00 */	cmplwi r3, 0
/* 800DEA3C 000DB99C  41 82 00 08 */	beq lbl_800DEA44
/* 800DEA40 000DB9A0  48 23 6E F1 */	bl Free__7CMemoryFPCv
lbl_800DEA44:
/* 800DEA44 000DB9A4  7F E0 07 35 */	extsh. r0, r31
/* 800DEA48 000DB9A8  40 81 00 0C */	ble lbl_800DEA54
/* 800DEA4C 000DB9AC  7F C3 F3 78 */	mr r3, r30
/* 800DEA50 000DB9B0  48 23 6E E1 */	bl Free__7CMemoryFPCv
lbl_800DEA54:
/* 800DEA54 000DB9B4  80 01 00 34 */	lwz r0, 0x34(r1)
/* 800DEA58 000DB9B8  7F C3 F3 78 */	mr r3, r30
/* 800DEA5C 000DB9BC  83 E1 00 2C */	lwz r31, 0x2c(r1)
/* 800DEA60 000DB9C0  83 C1 00 28 */	lwz r30, 0x28(r1)
/* 800DEA64 000DB9C4  7C 08 03 A6 */	mtlr r0
/* 800DEA68 000DB9C8  38 21 00 30 */	addi r1, r1, 0x30
/* 800DEA6C 000DB9CC  4E 80 00 20 */	blr

.global "GetIObjObjectFor__23TToken<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>"
"GetIObjObjectFor__23TToken<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>":
/* 800DEA70 000DB9D0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 800DEA74 000DB9D4  7C 08 02 A6 */	mflr r0
/* 800DEA78 000DB9D8  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DEA7C 000DB9DC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 800DEA80 000DB9E0  7C 7F 1B 78 */	mr r31, r3
/* 800DEA84 000DB9E4  48 00 00 19 */	bl "GetNewDerivedObject__41TObjOwnerDerivedFromIObj<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>"
/* 800DEA88 000DB9E8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 800DEA8C 000DB9EC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 800DEA90 000DB9F0  7C 08 03 A6 */	mtlr r0
/* 800DEA94 000DB9F4  38 21 00 10 */	addi r1, r1, 0x10
/* 800DEA98 000DB9F8  4E 80 00 20 */	blr

.global "GetNewDerivedObject__41TObjOwnerDerivedFromIObj<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>"
"GetNewDerivedObject__41TObjOwnerDerivedFromIObj<13CStateMachine>FRCQ24rstl25auto_ptr<13CStateMachine>":
/* 800DEA9C 000DB9FC  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 800DEAA0 000DBA00  7C 08 02 A6 */	mflr r0
/* 800DEAA4 000DBA04  3C A0 80 3D */	lis r5, lbl_803CE528@ha
/* 800DEAA8 000DBA08  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DEAAC 000DBA0C  38 05 E5 28 */	addi r0, r5, lbl_803CE528@l
/* 800DEAB0 000DBA10  38 A0 00 00 */	li r5, 0
/* 800DEAB4 000DBA14  93 E1 00 0C */	stw r31, 0xc(r1)
/* 800DEAB8 000DBA18  7C 9F 23 78 */	mr r31, r4
/* 800DEABC 000DBA1C  7C 04 03 78 */	mr r4, r0
/* 800DEAC0 000DBA20  93 C1 00 08 */	stw r30, 8(r1)
/* 800DEAC4 000DBA24  7C 7E 1B 78 */	mr r30, r3
/* 800DEAC8 000DBA28  38 60 00 08 */	li r3, 8
/* 800DEACC 000DBA2C  48 23 6D A1 */	bl __nw__FUlPCcPCc
/* 800DEAD0 000DBA30  28 03 00 00 */	cmplwi r3, 0
/* 800DEAD4 000DBA34  41 82 00 38 */	beq lbl_800DEB0C
/* 800DEAD8 000DBA38  3C 80 80 3E */	lis r4, __vt__4IObj@ha
/* 800DEADC 000DBA3C  3C A0 80 3E */	lis r5, __vt__31CObjOwnerDerivedFromIObjUntyped@ha
/* 800DEAE0 000DBA40  38 04 8D 6C */	addi r0, r4, __vt__4IObj@l
/* 800DEAE4 000DBA44  3C 80 80 3E */	lis r4, lbl_803DF700@ha
/* 800DEAE8 000DBA48  90 03 00 00 */	stw r0, 0(r3)
/* 800DEAEC 000DBA4C  38 C5 8D 78 */	addi r6, r5, __vt__31CObjOwnerDerivedFromIObjUntyped@l
/* 800DEAF0 000DBA50  38 A0 00 00 */	li r5, 0
/* 800DEAF4 000DBA54  38 04 F7 00 */	addi r0, r4, lbl_803DF700@l
/* 800DEAF8 000DBA58  90 C3 00 00 */	stw r6, 0(r3)
/* 800DEAFC 000DBA5C  98 BF 00 00 */	stb r5, 0(r31)
/* 800DEB00 000DBA60  80 9F 00 04 */	lwz r4, 4(r31)
/* 800DEB04 000DBA64  90 83 00 04 */	stw r4, 4(r3)
/* 800DEB08 000DBA68  90 03 00 00 */	stw r0, 0(r3)
lbl_800DEB0C:
/* 800DEB0C 000DBA6C  7C 03 00 D0 */	neg r0, r3
/* 800DEB10 000DBA70  7C 00 1B 78 */	or r0, r0, r3
/* 800DEB14 000DBA74  54 00 0F FE */	srwi r0, r0, 0x1f
/* 800DEB18 000DBA78  98 1E 00 00 */	stb r0, 0(r30)
/* 800DEB1C 000DBA7C  90 7E 00 04 */	stw r3, 4(r30)
/* 800DEB20 000DBA80  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 800DEB24 000DBA84  83 C1 00 08 */	lwz r30, 8(r1)
/* 800DEB28 000DBA88  80 01 00 14 */	lwz r0, 0x14(r1)
/* 800DEB2C 000DBA8C  7C 08 03 A6 */	mtlr r0
/* 800DEB30 000DBA90  38 21 00 10 */	addi r1, r1, 0x10
/* 800DEB34 000DBA94  4E 80 00 20 */	blr

.global "__dt__Q24rstl53auto_ptr<41TObjOwnerDerivedFromIObj<13CStateMachine>>Fv"
"__dt__Q24rstl53auto_ptr<41TObjOwnerDerivedFromIObj<13CStateMachine>>Fv":
/* 800DEB38 000DBA98  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 800DEB3C 000DBA9C  7C 08 02 A6 */	mflr r0
/* 800DEB40 000DBAA0  90 01 00 14 */	stw r0, 0x14(r1)
/* 800DEB44 000DBAA4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 800DEB48 000DBAA8  7C 9F 23 78 */	mr r31, r4
/* 800DEB4C 000DBAAC  93 C1 00 08 */	stw r30, 8(r1)
/* 800DEB50 000DBAB0  7C 7E 1B 79 */	or. r30, r3, r3
/* 800DEB54 000DBAB4  41 82 00 2C */	beq lbl_800DEB80
/* 800DEB58 000DBAB8  88 1E 00 00 */	lbz r0, 0(r30)
/* 800DEB5C 000DBABC  28 00 00 00 */	cmplwi r0, 0
/* 800DEB60 000DBAC0  41 82 00 10 */	beq lbl_800DEB70
/* 800DEB64 000DBAC4  80 7E 00 04 */	lwz r3, 4(r30)
/* 800DEB68 000DBAC8  38 80 00 01 */	li r4, 1
/* 800DEB6C 000DBACC  4B FF FE 29 */	bl sub_800de994
lbl_800DEB70:
/* 800DEB70 000DBAD0  7F E0 07 35 */	extsh. r0, r31
/* 800DEB74 000DBAD4  40 81 00 0C */	ble lbl_800DEB80
/* 800DEB78 000DBAD8  7F C3 F3 78 */	mr r3, r30
/* 800DEB7C 000DBADC  48 23 6D B5 */	bl Free__7CMemoryFPCv
lbl_800DEB80:
/* 800DEB80 000DBAE0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 800DEB84 000DBAE4  7F C3 F3 78 */	mr r3, r30
/* 800DEB88 000DBAE8  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 800DEB8C 000DBAEC  83 C1 00 08 */	lwz r30, 8(r1)
/* 800DEB90 000DBAF0  7C 08 03 A6 */	mtlr r0
/* 800DEB94 000DBAF4  38 21 00 10 */	addi r1, r1, 0x10
/* 800DEB98 000DBAF8  4E 80 00 20 */	blr

.section .rodata
.balign 8
.global lbl_803CE528
lbl_803CE528:
	# ROM: 0x3CB528
	.asciz "??(??)"
	.balign 4