x
1036
parameter (or (or (or (unit %claim_all) (nat %increase_reward)) (or (unit %initialize) (address %set_admin))) (or (nat %stake) (nat %unstake)));storage (pair (pair (pair (pair (pair (address %admin) (timestamp %creation_time)) (list %farm_points nat) (bool %initialized)) (pair (option %input_fa2_token_id_opt nat) (address %input_token_address)) (big_map %metadata string bytes) (nat %period_duration)) (pair (pair (nat %rate) (list %reward_at_week nat)) (option %reward_fa2_token_id_opt nat) (address %reward_reserve_address)) (pair (address %reward_token_address) (nat %total_periods)) (nat %total_reward) (big_map %user_points address (list nat))) (big_map %user_stakes address nat));code { PUSH bool True ; PUSH bool False ; PUSH string "Only the contract admin can change the contract administrator or increase reward" ; PUSH string "Cannot connect to the input token entrypoint" ; PUSH string "Cannot connect to the input FA2 token entrypoint" ; PUSH string "Cannot connect to the reward token entrypoint" ; PUSH string "Cannot connect to the reward FA2 token entrypoint" ; PUSH string "You must not send Tezos to the smart contract" ; PUSH string "There are no more weeks left for staking in the farm" ; PUSH string "The contract is already initialized" ; PUSH string "The contract is not initialized" ; NIL operation ; NIL nat ; LAMBDA (pair (pair (pair (pair (pair address timestamp) (list nat) bool) (pair (option nat) address) (big_map string bytes) nat) (pair (pair nat (list nat)) (option nat) address) (pair address nat) nat (big_map address (list nat))) (big_map address nat)) nat { DUP ; CAR ; CAR ; CAR ; CAR ; CDR ; NOW ; SUB ; ABS ; PUSH nat 1 ; DIG 2 ; CAR ; CAR ; CDR ; CDR ; CDR ; DIG 2 ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR ; ADD } ; LAMBDA (pair nat nat) nat { UNPAIR ; PUSH nat 1 ; PAIR ; PAIR ; LEFT nat ; LOOP_LEFT { UNPAIR ; UNPAIR ; PUSH nat 0 ; DUP 4 ; COMPARE ; EQ ; IF { SWAP ; DIG 2 ; DROP 2 ; RIGHT (pair (pair nat nat) nat) } { PUSH nat 1 ; DIG 3 ; SUB ; ABS ; DUP 3 ; DIG 3 ; DIG 3 ; MUL ; PAIR ; PAIR ; LEFT nat } } } ; LAMBDA (pair (list nat) (list nat)) (list nat) { LEFT (list nat) ; LOOP_LEFT { UNPAIR ; IF_CONS { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) } { RIGHT (pair (list nat) (list nat)) } } } ; LAMBDA (pair (pair (lambda (pair (list nat) (list nat)) (list nat)) (list nat) bool) (pair (list nat) (list nat) bool)) (list nat) { UNPAIR ; UNPAIR 3 ; DIG 3 ; UNPAIR 3 ; DUP 5 ; DIG 5 ; DIG 3 ; DIG 3 ; PAIR ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; UNPAIR ; IF_CONS { DIG 2 ; IF_CONS { DUP 9 ; DUP 8 ; COMPARE ; EQ ; IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ; DIG 3 ; SWAP ; CONS ; SWAP ; DIG 2 ; PAIR ; PAIR ; LEFT (list nat) } { DROP 3 ; PUSH string "size don't match" ; FAILWITH } } { IF_CONS { DROP 3 ; PUSH string "size don't match" ; FAILWITH } {} ; RIGHT (pair (pair (list nat) (list nat)) (list nat)) } } ; DIG 2 ; DIG 4 ; DROP 2 ; PAIR ; EXEC } ; DUP 17 ; DUP 6 ; DUP 4 ; PAIR 3 ; APPLY ; LAMBDA (pair (pair (lambda (pair nat nat) nat) (list nat)) (pair nat nat nat)) (list nat) { UNPAIR ; UNPAIR ; DIG 2 ; UNPAIR 3 ; DIG 4 ; DUP 3 ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; PUSH nat 0 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; RIGHT (pair nat (list nat)) } { SWAP ; PUSH nat 1 ; DUP 3 ; SUB ; ABS ; DUP 6 ; PAIR ; DUP 7 ; SWAP ; EXEC ; PUSH nat 1 ; DUP 4 ; SUB ; ABS ; PUSH nat 10000 ; PAIR ; DUP 8 ; SWAP ; EXEC ; DUP 7 ; PUSH nat 10000 ; SUB ; ABS ; PUSH nat 1 ; DUP 8 ; SUB ; ABS ; PUSH nat 10000 ; PAIR ; DUP 10 ; SWAP ; EXEC ; SWAP ; MUL ; DUP 7 ; DUP 9 ; PAIR ; DUP 10 ; SWAP ; EXEC ; DUP 8 ; PUSH nat 10000 ; PAIR ; DUP 11 ; SWAP ; EXEC ; SUB ; ABS ; DIG 2 ; MUL ; DIG 2 ; DUP 6 ; DIG 3 ; MUL ; MUL ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR ; CONS ; PUSH nat 1 ; DIG 2 ; SUB ; ABS ; PAIR ; LEFT (list nat) } } ; SWAP ; DIG 2 ; DIG 3 ; DIG 4 ; DROP 4 } ; DUP 6 ; DUP 5 ; PAIR ; APPLY ; DIG 3 ; DROP ; DIG 17 ; UNPAIR ; IF_LEFT { IF_LEFT { DIG 9 ; DIG 14 ; DIG 15 ; DIG 17 ; DROP 4 ; IF_LEFT { DIG 2 ; DIG 3 ; DIG 9 ; DIG 13 ; DROP 5 ; DIG 9 ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; CDR ; COMPARE ; EQ ; IF { DIG 5 ; DROP } { DIG 5 ; FAILWITH } ; SENDER ; DUP 2 ; DIG 4 ; SWAP ; EXEC ; PUSH nat 1 ; DUP 2 ; COMPARE ; GT ; IF {} { PUSH string "You cannot claim any reward before the first farm week as passed" ; FAILWITH } ; DIG 6 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; PUSH nat 1 ; SWAP ; SUB ; ABS ; DUP 3 ; CAR ; CDR ; CDR ; CDR ; CDR ; DUP 3 ; GET ; IF_NONE { SWAP ; DIG 3 ; DIG 4 ; DIG 6 ; DIG 7 ; DROP 6 ; SWAP } { DUP 4 ; CAR ; CDR ; CAR ; CAR ; CDR ; DUP 5 ; CAR ; CAR ; CAR ; CDR ; CAR ; DUP 3 ; PAIR ; DUP 4 ; PUSH nat 0 ; PAIR ; PAIR ; PAIR ; LEFT nat ; LOOP_LEFT { UNPAIR ; UNPAIR ; UNPAIR ; DIG 2 ; UNPAIR ; IF_CONS { DIG 2 ; IF_CONS { DIG 6 ; IF_CONS { PUSH nat 0 ; DUP 9 ; COMPARE ; GT ; IF { PUSH nat 0 ; DUP 4 ; COMPARE ; EQ ; IF { DIG 2 ; DIG 4 ; DROP 3 ; SWAP ; DIG 2 ; PAIR ; PUSH nat 1 ; DIG 4 ; SUB } { DIG 2 ; SWAP ; DIG 4 ; MUL ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR ; DIG 4 ; ADD ; SWAP ; DIG 2 ; DIG 3 ; PAIR ; PUSH nat 1 ; DIG 4 ; SUB } ; ABS ; DIG 3 ; PAIR ; PAIR ; PAIR ; LEFT nat } { SWAP ; DIG 2 ; DIG 3 ; DIG 4 ; DIG 5 ; DIG 7 ; DROP 7 ; RIGHT (pair (pair (pair nat nat) (list nat) (list nat)) (list nat)) } } { DROP 6 ; PUSH string "size don't match" ; FAILWITH } } { DROP 5 ; PUSH string "size don't match" ; FAILWITH } } { DIG 2 ; DROP ; IF_CONS { DROP 4 ; PUSH string "size don't match" ; FAILWITH } { SWAP ; IF_CONS { DROP 3 ; PUSH string "size don't match" ; FAILWITH } {} } ; RIGHT (pair (pair (pair nat nat) (list nat) (list nat)) (list nat)) } } ; DUP 5 ; CAR ; CDR ; CAR ; CDR ; CDR ; DUP 6 ; CAR ; CDR ; CDR ; CAR ; CAR ; DUP 7 ; CAR ; CDR ; CAR ; CDR ; CAR ; IF_NONE { DIG 10 ; DROP ; CONTRACT %transfer (pair address address nat) ; IF_NONE { DIG 9 ; FAILWITH } { DIG 10 ; DROP } ; PUSH mutez 0 ; DUP 4 ; DUP 8 ; PAIR ; DIG 3 ; PAIR ; TRANSFER_TOKENS } { DIG 12 ; DROP ; SWAP ; CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ; IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ; PUSH mutez 0 ; NIL (pair address (list (pair address nat nat))) ; NIL (pair address nat nat) ; DUP 7 ; DIG 5 ; PAIR ; DUP 10 ; PAIR ; CONS ; DIG 4 ; PAIR ; CONS ; TRANSFER_TOKENS } ; PUSH nat 0 ; DIG 2 ; COMPARE ; EQ ; IF { SWAP ; DIG 2 ; DIG 3 ; DIG 5 ; DIG 6 ; DROP 6 ; SWAP } { DIG 7 ; DROP ; DUP 7 ; DIG 2 ; DIG 3 ; DIG 7 ; PAIR ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; UNPAIR ; DIG 2 ; IF_CONS { PUSH nat 0 ; DUP 5 ; COMPARE ; GT ; IF { DROP ; PUSH nat 1 ; DIG 3 ; SUB ; ABS ; DIG 2 ; PUSH nat 0 } { SWAP ; DUG 3 } ; CONS ; PAIR ; PAIR ; LEFT (list nat) } { SWAP ; DROP ; RIGHT (pair (pair (list nat) nat) (list nat)) } } ; PAIR ; DIG 4 ; SWAP ; EXEC ; DUP 4 ; DUP 5 ; CAR ; DUP ; CDR ; DUP ; CDR ; DUP ; CDR ; DIG 8 ; CAR ; CDR ; CDR ; CDR ; CDR ; DIG 6 ; SOME ; DIG 8 ; UPDATE ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 1 ; NIL operation ; DIG 2 ; CONS } } } { DIG 4 ; DIG 6 ; DIG 11 ; DIG 12 ; DROP 4 ; DUP 2 ; CAR ; CDR ; CDR ; CAR ; CDR ; NOW ; DUP 4 ; CAR ; CAR ; CAR ; CAR ; CDR ; DUP 5 ; DIG 8 ; SWAP ; EXEC ; DUP 14 ; DUP 7 ; CAR ; CAR ; CAR ; CDR ; CDR ; COMPARE ; EQ ; IF { DIG 9 ; DROP } { DIG 9 ; FAILWITH } ; DIG 11 ; DUP 7 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DIG 10 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DIG 9 ; DUP 7 ; CAR ; CAR ; CDR ; CDR ; CDR ; DUP 6 ; MUL ; INT ; DUP 4 ; ADD ; DUP 5 ; COMPARE ; LT ; IF { DROP } { FAILWITH } ; PUSH nat 0 ; DUP 6 ; COMPARE ; GT ; IF {} { PUSH string "The increase amount must be greater than zero" ; FAILWITH } ; PUSH nat 1 ; DUP 2 ; DIG 5 ; SUB ; ABS ; ADD ; DUP 6 ; CAR ; CDR ; CAR ; CAR ; CAR ; SWAP ; DUP 6 ; PAIR 3 ; DIG 6 ; SWAP ; EXEC ; PUSH nat 1 ; DIG 2 ; SUB ; ABS ; SWAP ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; PUSH nat 0 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; RIGHT (pair (list nat) nat) } { PUSH nat 1 ; DIG 2 ; SUB ; ABS ; SWAP ; PUSH nat 0 ; CONS ; PAIR ; LEFT (list nat) } } ; DIG 7 ; SWAP ; DUP 6 ; CAR ; CDR ; CAR ; CAR ; CDR ; PAIR 3 ; DIG 5 ; SWAP ; EXEC ; DUP 5 ; DUP 6 ; CAR ; DUP ; CDR ; DUP ; CDR ; DUP ; CDR ; DUP 9 ; DIG 10 ; CAR ; CDR ; CDR ; CDR ; CAR ; ADD ; UPDATE 1 ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 1 ; DUP ; CAR ; DUP ; CDR ; DUP ; CAR ; DUP ; CAR ; DIG 5 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 2 ; UPDATE 1 ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; PUSH nat 0 ; DIG 8 ; COMPARE ; EQ ; IF { DIG 5 ; DROP } { DIG 6 ; DROP } ; DIG 5 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; SWAP } } { DIG 3 ; DIG 4 ; DIG 6 ; DIG 8 ; DROP 4 ; IF_LEFT { DROP ; NOW ; DUP 2 ; DIG 4 ; SWAP ; EXEC ; DROP ; DIG 11 ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DIG 6 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DIG 5 ; DUP 3 ; CAR ; CAR ; CDR ; CDR ; CDR ; INT ; DUP 4 ; CAR ; CAR ; CAR ; CAR ; CDR ; ADD ; DUP 3 ; COMPARE ; LT ; IF { DROP } { FAILWITH } ; PUSH nat 0 ; DUP 3 ; CAR ; CDR ; CAR ; CAR ; CDR ; SIZE ; COMPARE ; EQ ; IF {} { DUP 5 ; FAILWITH } ; DIG 9 ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; CDR ; COMPARE ; EQ ; IF { DIG 4 ; DROP } { DIG 4 ; FAILWITH } ; DUP 2 ; CAR ; CDR ; CAR ; CAR ; CAR ; DUP 3 ; CAR ; CDR ; CDR ; CAR ; CDR ; DUP 4 ; CAR ; CDR ; CDR ; CDR ; CAR ; PAIR 3 ; DIG 3 ; SWAP ; EXEC ; DUP 3 ; CAR ; CAR ; CDR ; CAR ; CAR ; IF_NONE { DIG 6 ; DROP ; DUP 3 ; CAR ; CAR ; CDR ; CAR ; CDR ; CONTRACT %transfer (pair address address nat) ; IF_NONE { DIG 6 ; FAILWITH } { DIG 7 ; DROP 2 } } { DIG 8 ; DROP 2 ; DUP 3 ; CAR ; CAR ; CDR ; CAR ; CDR ; CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ; IF_NONE { DIG 6 ; FAILWITH } { DIG 7 ; DROP 2 } } ; DUP 3 ; CAR ; CDR ; CAR ; CDR ; CAR ; IF_NONE { DIG 4 ; DROP ; DUP 3 ; CAR ; CDR ; CDR ; CAR ; CAR ; CONTRACT %transfer (pair address address nat) ; IF_NONE { DIG 4 ; FAILWITH } { DIG 5 ; DROP 2 } } { DIG 6 ; DROP 2 ; DUP 3 ; CAR ; CDR ; CDR ; CAR ; CAR ; CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ; IF_NONE { DIG 4 ; FAILWITH } { DIG 5 ; DROP 2 } } ; DUP 3 ; DIG 3 ; CAR ; DUP ; CDR ; DUP ; CAR ; DUP ; CAR ; DIG 5 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 2 ; UPDATE 1 ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DIG 5 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CDR ; DIG 6 ; UPDATE 2 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 } { DIG 2 ; DIG 3 ; DIG 5 ; DIG 6 ; DIG 8 ; DIG 9 ; DIG 10 ; DIG 11 ; DIG 13 ; DIG 14 ; DROP 10 ; DIG 4 ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DIG 3 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DUP 2 ; DIG 2 ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DIG 5 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 } ; SWAP } } { DIG 2 ; DIG 4 ; DIG 7 ; DIG 9 ; DIG 12 ; DIG 13 ; DIG 16 ; DROP 7 ; IF_LEFT { DIG 10 ; DROP ; DUP 2 ; CAR ; CAR ; CDR ; CAR ; CDR ; NOW ; SENDER ; DUP 5 ; CAR ; CAR ; CAR ; CDR ; CAR ; DUP 6 ; CAR ; CDR ; CDR ; CDR ; CDR ; DUP 7 ; DIG 9 ; SWAP ; EXEC ; DUP 8 ; CAR ; CAR ; CDR ; CDR ; CDR ; DUP 2 ; MUL ; INT ; DUP 9 ; CAR ; CAR ; CAR ; CAR ; CDR ; ADD ; DUP 17 ; DUP 10 ; CAR ; CAR ; CAR ; CDR ; CDR ; COMPARE ; EQ ; IF { DIG 11 ; DROP } { DIG 11 ; FAILWITH } ; DIG 12 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; PUSH nat 0 ; DUP 9 ; COMPARE ; GT ; IF {} { PUSH string "The farm staking amount must be greater than zero" ; FAILWITH } ; DIG 11 ; DUP 10 ; CAR ; CAR ; CDR ; CDR ; CDR ; DUP 11 ; CAR ; CDR ; CDR ; CAR ; CDR ; MUL ; INT ; DUP 11 ; CAR ; CAR ; CAR ; CAR ; CDR ; ADD ; DUP 8 ; COMPARE ; LT ; IF { DROP } { FAILWITH } ; PUSH string "Please try again in few seconds" ; PUSH int 0 ; DUP 3 ; DUP 9 ; SUB ; COMPARE ; LT ; IF { DROP } { FAILWITH } ; DUP 9 ; CAR ; CAR ; CDR ; CAR ; CAR ; IF_NONE { DIG 11 ; DROP ; DIG 6 ; CONTRACT %transfer (pair address address nat) ; IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ; DUP 8 ; SELF_ADDRESS ; PAIR ; DUP 7 ; PAIR ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS } { DIG 13 ; DROP ; DIG 7 ; CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ; IF_NONE { DIG 11 ; FAILWITH } { DIG 12 ; DROP } ; NIL (pair address nat nat) ; DUP 10 ; DIG 3 ; PAIR ; SELF_ADDRESS ; PAIR ; CONS ; DUP 7 ; PAIR ; SWAP ; PUSH mutez 0 ; NIL (pair address (list (pair address nat nat))) ; DIG 3 ; CONS ; TRANSFER_TOKENS } ; NIL operation ; SWAP ; CONS ; DUP 9 ; CDR ; DUP 7 ; GET ; IF_NONE { DUP 9 ; CDR ; DUP 9 ; DUP 8 ; SWAP ; SOME ; SWAP ; UPDATE } { DUP 10 ; CDR ; SWAP ; DUP 10 ; ADD ; SOME ; DUP 8 ; UPDATE } ; DIG 2 ; DIG 7 ; SUB ; ABS ; DUP 8 ; SWAP ; MUL ; DIG 7 ; DUP 9 ; CAR ; CAR ; CDR ; CDR ; CDR ; MUL ; DIG 10 ; DUP 10 ; CAR ; CDR ; CDR ; CAR ; CDR ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; PUSH nat 0 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; RIGHT (pair nat (list nat)) } { SWAP ; DUP 7 ; DUP 3 ; COMPARE ; LT ; IF { PUSH nat 0 } { DUP 7 ; DUP 3 ; COMPARE ; EQ ; IF { DUP 4 } { DUP 3 } } ; CONS ; PUSH nat 1 ; DIG 2 ; SUB ; ABS ; PAIR ; LEFT (list nat) } } ; SWAP ; DIG 2 ; DIG 5 ; DROP 3 ; DUP 4 ; DUP 7 ; GET ; IF_NONE { DUP } { DUP 10 ; DUP 3 ; DIG 2 ; PAIR 3 ; DUP 9 ; SWAP ; EXEC } ; PUSH nat 0 ; DUP 7 ; SIZE ; COMPARE ; EQ ; IF { SWAP ; DIG 5 ; DIG 8 ; DIG 9 ; DROP 4 ; DUP } { DIG 9 ; DIG 2 ; DIG 6 ; PAIR 3 ; DIG 7 ; SWAP ; EXEC } ; DIG 6 ; DIG 3 ; UPDATE 2 ; DUP ; CAR ; DUP ; CDR ; DUP ; CDR ; DUP ; CDR ; DIG 8 ; DIG 7 ; SOME ; DIG 9 ; UPDATE ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 1 ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CDR ; DIG 5 ; UPDATE 1 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 } { DIG 6 ; DIG 8 ; DROP 2 ; DIG 9 ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; CDR ; COMPARE ; EQ ; IF { DIG 5 ; DROP } { DIG 5 ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CDR ; CAR ; CDR ; NOW ; DUP 4 ; DIG 6 ; SWAP ; EXEC ; DUP 5 ; CAR ; CDR ; CDR ; CDR ; CDR ; DIG 8 ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; SENDER ; DUP 7 ; CAR ; CAR ; CDR ; CDR ; CDR ; DUP 4 ; MUL ; INT ; DUP 8 ; CAR ; CAR ; CAR ; CAR ; CDR ; ADD ; DUP 8 ; CDR ; DUP 3 ; GET ; IF_NONE { PUSH string "You did not stake any token yet" ; FAILWITH } {} ; DUP 8 ; DUP 2 ; COMPARE ; GE ; IF {} { PUSH string "You cannot unstake more than your farm staking" ; FAILWITH } ; DUP 9 ; CDR ; DUP 9 ; DIG 2 ; SUB ; ABS ; SOME ; DUP 4 ; UPDATE ; DUP 9 ; CAR ; CAR ; CDR ; CAR ; CAR ; IF_NONE { DIG 6 ; CONTRACT %transfer (pair address address nat) ; IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ; DUP 8 ; DUP 5 ; PAIR ; SELF_ADDRESS ; PAIR ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS } { DIG 7 ; CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ; IF_NONE { DIG 11 ; FAILWITH } { DIG 12 ; DROP } ; NIL (pair address nat nat) ; DUP 10 ; DIG 3 ; PAIR ; DUP 6 ; PAIR ; CONS ; SELF_ADDRESS ; PAIR ; SWAP ; PUSH mutez 0 ; NIL (pair address (list (pair address nat nat))) ; DIG 3 ; CONS ; TRANSFER_TOKENS } ; NIL operation ; SWAP ; CONS ; DUP 3 ; DUP 8 ; COMPARE ; LT ; IF { DIG 2 ; DIG 6 ; SUB ; ABS ; DUP 7 ; SWAP ; MUL ; DIG 6 ; DUP 8 ; CAR ; CAR ; CDR ; CDR ; CDR ; MUL ; DIG 9 ; DUP 9 ; CAR ; CDR ; CDR ; CAR ; CDR ; PAIR ; LEFT (list nat) ; LOOP_LEFT { UNPAIR ; PUSH nat 0 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; RIGHT (pair nat (list nat)) } { SWAP ; DUP 9 ; DUP 3 ; COMPARE ; LT ; IF { PUSH nat 0 } { DUP 9 ; DUP 3 ; COMPARE ; EQ ; IF { DUP 4 } { DUP 3 } } ; CONS ; PUSH nat 1 ; DIG 2 ; SUB ; ABS ; PAIR ; LEFT (list nat) } } ; SWAP ; DIG 2 ; DIG 7 ; DROP 3 ; DUP 5 ; DUP 5 ; GET ; IF_NONE { PUSH string "Some points should exist" ; FAILWITH } { DUP 9 ; DUP 3 ; DIG 2 ; PAIR 3 ; DUP 8 ; SWAP ; EXEC } ; DIG 8 ; DIG 2 ; DUP 8 ; CAR ; CAR ; CAR ; CDR ; CAR ; PAIR 3 ; DIG 7 ; SWAP ; EXEC ; DIG 6 ; DIG 4 ; UPDATE 2 ; DUP ; CAR ; DUP ; CDR ; DUP ; CDR ; DUP ; CDR ; DIG 9 ; DIG 7 ; SOME ; DIG 9 ; UPDATE ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 2 ; UPDATE 1 ; DUP ; CAR ; DUP ; CAR ; DUP ; CAR ; DUP ; CDR ; DIG 5 ; UPDATE 1 ; UPDATE 2 ; UPDATE 1 ; UPDATE 1 ; UPDATE 1 } { DIG 2 ; DIG 3 ; DIG 4 ; DIG 5 ; DIG 6 ; DIG 7 ; DIG 9 ; DIG 10 ; DIG 11 ; DROP 9 ; DUG 2 ; UPDATE 2 } } ; SWAP } ; PAIR }