.version sol 0.62.0

.macro constructor
DROP
GETGLOB 2
ISNULL
IFREF {
	CALL $c4_to_c7_with_init_storage$
}
GETGLOB 6
THROWIF 51
ENDS
ACCEPT
CALLREF {
	CALL $c7_to_c4$
}
THROW 0

.macro onNftChangeManager
DROP
GETGLOB 6
THROWIFNOT 76
GETGLOB 2
ISNULL
IFREF {
	CALL $c4_to_c7$
}
.loc ../contracts/test/CallbacksTest.tsol, 20
OVER
PUSHCONT {
	LDREF
	ENDS
	CTOS
}
IF
LDU 256
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
.loc ../contracts/test/CallbacksTest.tsol, 0
CALLREF {
	CALL $onNftChangeManager_3b8ea82d_internal_macro$
}
DROP
CALLREF {
	CALL $c7_to_c4$
}
THROW 0

.macro onNftChangeManager_3b8ea82d_internal_macro
.loc ../contracts/test/CallbacksTest.tsol, 29
BLKDROP 7
PUSHINT 1000000000
PUSHINT 0
RAWRESERVE
.loc ../contracts/test/CallbacksTest.tsol, 0

.macro onNftChangeOwner
DROP
GETGLOB 6
THROWIFNOT 76
GETGLOB 2
ISNULL
IFREF {
	CALL $c4_to_c7$
}
.loc ../contracts/test/CallbacksTest.tsol, 34
OVER
PUSHCONT {
	LDREF
	ENDS
	CTOS
}
IF
LDU 256
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
.loc ../contracts/test/CallbacksTest.tsol, 0
CALLREF {
	CALL $onNftChangeOwner_d2df677b_internal_macro$
}
DROP
CALLREF {
	CALL $c7_to_c4$
}
THROW 0

.macro onNftChangeOwner_d2df677b_internal_macro
.loc ../contracts/test/CallbacksTest.tsol, 43
BLKDROP 7
PUSHINT 1000000000
PUSHINT 0
RAWRESERVE
.loc ../contracts/test/CallbacksTest.tsol, 0

.macro onNftTransfer
DROP
GETGLOB 6
THROWIFNOT 76
GETGLOB 2
ISNULL
IFREF {
	CALL $c4_to_c7$
}
.loc ../contracts/test/CallbacksTest.tsol, 48
OVER
PUSHCONT {
	LDREF
	ENDS
	CTOS
}
IF
LDU 256
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
.loc ../contracts/test/CallbacksTest.tsol, 0
CALLREF {
	CALL $onNftTransfer_d26f58b0_internal_macro$
}
DROP
CALLREF {
	CALL $c7_to_c4$
}
THROW 0

.macro onNftTransfer_d26f58b0_internal_macro
.loc ../contracts/test/CallbacksTest.tsol, 58
BLKDROP 8
PUSHINT 1000000000
PUSHINT 0
RAWRESERVE
.loc ../contracts/test/CallbacksTest.tsol, 0

.macro onAcceptNftBurn
DROP
GETGLOB 6
THROWIFNOT 76
GETGLOB 2
ISNULL
IFREF {
	CALL $c4_to_c7$
}
.loc ../contracts/test/CallbacksTest.tsol, 63
OVER
PUSHCONT {
	LDREF
	ENDS
	CTOS
}
IF
LDMSGADDR
LDU 256
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
CTOS
LDMSGADDR
LDREF
ENDS
.loc ../contracts/test/CallbacksTest.tsol, 0
CALLREF {
	CALL $onAcceptNftBurn_66b42c95_internal_macro$
}
DROP
CALLREF {
	CALL $c7_to_c4$
}
THROW 0

.macro onAcceptNftBurn_66b42c95_internal_macro
.loc ../contracts/test/CallbacksTest.tsol, 72
BLKDROP 7
PUSHINT 1000000000
PUSHINT 0
RAWRESERVE
.loc ../contracts/test/CallbacksTest.tsol, 0

.macro c4_to_c7
PUSHROOT
CTOS
LDU 256 ; pubkey c4
LDU 64 ; pubkey timestamp c4
LDU 1 ; ctor flag
NIP
LDU 32
ENDS
SETGLOB 10
SETGLOB 3
SETGLOB 2

.macro c4_to_c7_with_init_storage
PUSHROOT
CTOS
SBITS
GTINT 1
PUSHCONT {
	PUSHINT 0
	PUSHROOT
	CTOS
	PLDDICT ; D
	PUSHINT 1
	OVER
	PUSHINT 64
	DICTUGET
	ZEROSWAPIFNOT
	PUSHCONT {
		PLDU 32
	}
	IF
	SETGLOB 10
	PUSHINT 64
	DICTUGET
	THROWIFNOT 61
	PLDU 256
	SETGLOB 2
	PUSHINT 0 ; timestamp
	SETGLOB 3
}
IFREFELSE {
	CALL $c4_to_c7$
}

.macro c7_to_c4
GETGLOB 10
GETGLOB 3
GETGLOB 2
NEWC
STU 256
STU 64
STONE
STU 32
ENDC
POPROOT

.macro upd_only_time_in_c4
PUSHROOT
CTOS
LDU 256
LDU 64
NIP
GETGLOB 3
ROT
NEWC
STU 256
STU 64
STSLICE
ENDC
POPROOT

.internal-alias :main_internal, 0
.internal :main_internal
PUSHROOT
CTOS
SBITS
NEQINT 1
SETGLOB 6
PUSH S2
CTOS
PLDU 4
MODPOW2 1
IFRET
OVER
SEMPTY ; isEmpty
IFJMPREF {
	GETGLOB 6
	THROWIFNOT 76
}
OVER
LDUQ 32  ; [funcId] body' ok
THROWIFNOT 60
OVER
IFNOTJMPREF {
	GETGLOB 6
	THROWIFNOT 76
}
SWAP
CALLREF {
	CALL $public_function_selector$
}
THROW 60

.internal-alias :main_external, -1
.internal :main_external
PUSHROOT
CTOS
SBITS
NEQINT 1
SETGLOB 6
OVER
CALLREF {
	CALL $c4_to_c7_with_init_storage$
}
LDU 1 ; haveSign msgSlice
SWAP
PUSHCONT {
	PUSHPOW2 9
	LDSLICEX ; signatureSlice msgSlice
	DUP
	HASHSU ; signatureSlice msgSlice hashMsgSlice
	SWAP
	LDU 1 ; signatureSlice hashMsgSlice hasPubkey msgSlice
	SWAP
	PUSHCONT {
		LDU 256 ; signatureSlice hashMsgSlice pubkey msgSlice
		XCHG S3
		SWAP
	}
	PUSHCONT {
		XCHG S2
		GETGLOB 2
	}
	IFELSE
	CHKSIGNU ; msgSlice isSigned
	THROWIFNOT 40
}
PUSHCONT {
	LDU 1 ; hasPubkey msgSlice
	SWAP
	THROWIF 58
}
IFELSE
LDU 64 ; timestamp msgSlice
SWAP
CALL $replay_protection_macro$
LDU 32 ; expireAt msgSlice
SWAP
NOW ; msgSlice expireAt now
GREATER ; msgSlice expireAt>now
THROWIFNOT 57
LDU 32 ; funcId body
SWAP
CALLREF {
	CALL $public_function_selector$
}
THROW 60

.macro public_function_selector
DUP
PUSHINT 1756716863
LEQ
IFJMPREF {
	DUP
	PUSHINT 601546343
	EQUAL
	IFJMPREF {
		CALL $onNftChangeManager$
	}
	DUP
	PUSHINT 1157502361
	EQUAL
	IFJMPREF {
		CALL $onAcceptNftBurn$
	}
	DUP
	PUSHINT 1620443001
	EQUAL
	IFJMPREF {
		CALL $onNftChangeOwner$
	}
	DUP
	PUSHINT 1756716863
	EQUAL
	IFJMPREF {
		CALL $constructor$
	}
}
DUP
PUSHINT 2087248313
EQUAL
IFJMPREF {
	CALL $onNftTransfer$
}

