{
    "version": "0.1.0",
    "name": "farms",
    "instructions": [
        {
            "name": "initializeGlobalConfig",
            "accounts": [
                {
                    "name": "globalAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "treasuryVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateGlobalConfig",
            "accounts": [
                {
                    "name": "globalAdmin",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "mode",
                    "type": "u8"
                },
                {
                    "name": "value",
                    "type": {
                        "array": [
                            "u8",
                            32
                        ]
                    }
                }
            ]
        },
        {
            "name": "initializeFarm",
            "accounts": [
                {
                    "name": "farmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "initializeFarmDelegated",
            "accounts": [
                {
                    "name": "farmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmDelegate",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "initializeReward",
            "accounts": [
                {
                    "name": "farmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardTreasuryVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "treasuryVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "addRewards",
            "accounts": [
                {
                    "name": "farmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                },
                {
                    "name": "rewardIndex",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "updateFarmConfig",
            "accounts": [
                {
                    "name": "farmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                }
            ],
            "args": [
                {
                    "name": "mode",
                    "type": "u16"
                },
                {
                    "name": "data",
                    "type": {
                        "array": [
                            "u8",
                            32
                        ]
                    }
                }
            ]
        },
        {
            "name": "initializeUser",
            "accounts": [
                {
                    "name": "authority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "delegatee",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "transferOwnership",
            "accounts": [
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "newOwner",
                    "type": "publicKey"
                }
            ]
        },
        {
            "name": "refreshFarm",
            "accounts": [
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                }
            ],
            "args": []
        },
        {
            "name": "stake",
            "accounts": [
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "setStakeDelegated",
            "accounts": [
                {
                    "name": "delegateAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "newAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "harvestReward",
            "accounts": [
                {
                    "name": "owner",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "userRewardAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardsVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardsTreasuryVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "unstake",
            "accounts": [
                {
                    "name": "owner",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                }
            ],
            "args": [
                {
                    "name": "stakeSharesScaled",
                    "type": "u128"
                }
            ]
        },
        {
            "name": "refreshUserState",
            "accounts": [
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "scopePrices",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                }
            ],
            "args": []
        },
        {
            "name": "withdrawUnstakedDeposits",
            "accounts": [
                {
                    "name": "owner",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "userState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "withdrawTreasury",
            "accounts": [
                {
                    "name": "globalAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardTreasuryVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "treasuryVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "withdrawDestinationTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "depositToFarmVault",
            "accounts": [
                {
                    "name": "depositor",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "depositorAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "withdrawFromFarmVault",
            "accounts": [
                {
                    "name": "withdrawAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "withdrawerTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "withdrawSlashedAmount",
            "accounts": [
                {
                    "name": "crank",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "slashedAmountSpillAddress",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "farmVaultsAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateFarmAdmin",
            "accounts": [
                {
                    "name": "pendingFarmAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "farmState",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateGlobalConfigAdmin",
            "accounts": [
                {
                    "name": "pendingGlobalAdmin",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        }
    ],
    "accounts": [
        {
            "name": "GlobalConfig",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "globalAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "treasuryFeeBps",
                        "type": "u64"
                    },
                    {
                        "name": "treasuryVaultsAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "treasuryVaultsAuthorityBump",
                        "type": "u64"
                    },
                    {
                        "name": "pendingGlobalAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "padding1",
                        "type": {
                            "array": [
                                "u128",
                                126
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "FarmState",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "farmAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "globalConfig",
                        "type": "publicKey"
                    },
                    {
                        "name": "token",
                        "type": {
                            "defined": "TokenInfo"
                        }
                    },
                    {
                        "name": "rewardInfos",
                        "type": {
                            "array": [
                                {
                                    "defined": "RewardInfo"
                                },
                                10
                            ]
                        }
                    },
                    {
                        "name": "numRewardTokens",
                        "type": "u64"
                    },
                    {
                        "name": "numUsers",
                        "docs": [
                            "Data used to calculate the rewards of the user"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "totalStakedAmount",
                        "docs": [
                            "The number of token in the `farm_vault` staked (getting rewards and fees)",
                            "Set such as `farm_vault.amount = total_staked_amount + total_pending_amount`"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "farmVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "farmVaultsAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "farmVaultsAuthorityBump",
                        "type": "u64"
                    },
                    {
                        "name": "delegateAuthority",
                        "docs": [
                            "Only used for delegate farms",
                            "Set to `default()` otherwise"
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "timeUnit",
                        "docs": [
                            "Raw representation of a `TimeUnit`",
                            "Seconds = 0, Slots = 1"
                        ],
                        "type": "u8"
                    },
                    {
                        "name": "padding0",
                        "type": {
                            "array": [
                                "u8",
                                7
                            ]
                        }
                    },
                    {
                        "name": "withdrawAuthority",
                        "docs": [
                            "Withdraw authority for the farm, allowed to lock deposited funds and withdraw them",
                            "Set to `default()` if unused (only the depositors can withdraw their funds)"
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "depositWarmupPeriod",
                        "docs": [
                            "Delay between a user deposit and the moment it is considered as staked",
                            "0 if unused"
                        ],
                        "type": "u32"
                    },
                    {
                        "name": "withdrawalCooldownPeriod",
                        "docs": [
                            "Delay between a user unstake and the ability to withdraw his deposit."
                        ],
                        "type": "u32"
                    },
                    {
                        "name": "totalActiveStakeScaled",
                        "docs": [
                            "Total active stake of tokens in the farm (scaled from `Decimal` representation)."
                        ],
                        "type": "u128"
                    },
                    {
                        "name": "totalPendingStakeScaled",
                        "docs": [
                            "Total pending stake of tokens in the farm (scaled from `Decimal` representation).",
                            "(can be used by `withdraw_authority` but don't get rewards or fees)"
                        ],
                        "type": "u128"
                    },
                    {
                        "name": "totalPendingAmount",
                        "docs": [
                            "Total pending amount of tokens in the farm"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "slashedAmountCurrent",
                        "docs": [
                            "Slashed amounts from early withdrawal"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "slashedAmountCumulative",
                        "type": "u64"
                    },
                    {
                        "name": "slashedAmountSpillAddress",
                        "type": "publicKey"
                    },
                    {
                        "name": "lockingMode",
                        "docs": [
                            "Locking stake"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "lockingStartTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "lockingDuration",
                        "type": "u64"
                    },
                    {
                        "name": "lockingEarlyWithdrawalPenaltyBps",
                        "type": "u64"
                    },
                    {
                        "name": "depositCapAmount",
                        "type": "u64"
                    },
                    {
                        "name": "scopePrices",
                        "type": "publicKey"
                    },
                    {
                        "name": "scopeOraclePriceId",
                        "type": "u64"
                    },
                    {
                        "name": "scopeOracleMaxAge",
                        "type": "u64"
                    },
                    {
                        "name": "pendingFarmAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                90
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "UserState",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "userId",
                        "type": "u64"
                    },
                    {
                        "name": "farmState",
                        "type": "publicKey"
                    },
                    {
                        "name": "owner",
                        "type": "publicKey"
                    },
                    {
                        "name": "legacyStake",
                        "docs": [
                            "User data to account for rewards"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "rewardsTallyScaled",
                        "docs": [
                            "Rewards tally used for computation of gained rewards",
                            "(scaled from `Decimal` representation)."
                        ],
                        "type": {
                            "array": [
                                "u128",
                                10
                            ]
                        }
                    },
                    {
                        "name": "rewardsIssuedUnclaimed",
                        "docs": [
                            "Number of reward tokens ready for claim"
                        ],
                        "type": {
                            "array": [
                                "u64",
                                10
                            ]
                        }
                    },
                    {
                        "name": "lastClaimTs",
                        "type": {
                            "array": [
                                "u64",
                                10
                            ]
                        }
                    },
                    {
                        "name": "activeStakeScaled",
                        "docs": [
                            "User stake deposited and usable, generating rewards and fees.",
                            "(scaled from `Decimal` representation)."
                        ],
                        "type": "u128"
                    },
                    {
                        "name": "pendingDepositStakeScaled",
                        "docs": [
                            "User stake deposited but not usable and not generating rewards yet.",
                            "(scaled from `Decimal` representation)."
                        ],
                        "type": "u128"
                    },
                    {
                        "name": "pendingDepositStakeTs",
                        "docs": [
                            "After this timestamp, pending user stake can be moved to user stake",
                            "Initialized to now() + delayed user stake period"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "pendingWithdrawalUnstakeScaled",
                        "docs": [
                            "User deposits unstaked, pending for withdrawal, not usable and not generating rewards.",
                            "(scaled from `Decimal` representation)."
                        ],
                        "type": "u128"
                    },
                    {
                        "name": "pendingWithdrawalUnstakeTs",
                        "docs": [
                            "After this timestamp, user can withdraw their deposit."
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "bump",
                        "docs": [
                            "User bump used for account address validation"
                        ],
                        "type": "u64"
                    },
                    {
                        "name": "delegatee",
                        "docs": [
                            "Delegatee used for initialisation - useful to check against"
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "lastStakeTs",
                        "type": "u64"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                50
                            ]
                        }
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "RewardScheduleCurve",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "points",
                        "docs": [
                            "This is a stepwise function, meaning that each point represents",
                            "how many rewards are issued per time unit since the beginning",
                            "of that point until the beginning of the next point.",
                            "This is not a linear curve, there is no interpolation going on.",
                            "A curve can be [[t0, 100], [t1, 50], [t2, 0]]",
                            "meaning that from t0 to t1, 100 rewards are issued per time unit,",
                            "from t1 to t2, 50 rewards are issued per time unit, and after t2 it stops",
                            "Another curve, can be [[t0, 100], [u64::max, 0]]",
                            "meaning that from t0 to u64::max, 100 rewards are issued per time unit"
                        ],
                        "type": {
                            "array": [
                                {
                                    "defined": "RewardPerTimeUnitPoint"
                                },
                                20
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "RewardPerTimeUnitPoint",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "tsStart",
                        "type": "u64"
                    },
                    {
                        "name": "rewardPerTimeUnit",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "RewardInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "token",
                        "type": {
                            "defined": "TokenInfo"
                        }
                    },
                    {
                        "name": "rewardsVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "rewardsAvailable",
                        "type": "u64"
                    },
                    {
                        "name": "rewardScheduleCurve",
                        "type": {
                            "defined": "RewardScheduleCurve"
                        }
                    },
                    {
                        "name": "minClaimDurationSeconds",
                        "type": "u64"
                    },
                    {
                        "name": "lastIssuanceTs",
                        "type": "u64"
                    },
                    {
                        "name": "rewardsIssuedUnclaimed",
                        "type": "u64"
                    },
                    {
                        "name": "rewardsIssuedCumulative",
                        "type": "u64"
                    },
                    {
                        "name": "rewardPerShareScaled",
                        "type": "u128"
                    },
                    {
                        "name": "placeholder0",
                        "type": "u64"
                    },
                    {
                        "name": "rewardType",
                        "type": "u8"
                    },
                    {
                        "name": "rewardsPerSecondDecimals",
                        "type": "u8"
                    },
                    {
                        "name": "padding0",
                        "type": {
                            "array": [
                                "u8",
                                6
                            ]
                        }
                    },
                    {
                        "name": "padding1",
                        "type": {
                            "array": [
                                "u64",
                                20
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "TokenInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "mint",
                        "type": "publicKey"
                    },
                    {
                        "name": "decimals",
                        "type": "u64"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                10
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "GlobalConfigOption",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "SetPendingGlobalAdmin"
                    },
                    {
                        "name": "SetTreasuryFeeBps"
                    }
                ]
            }
        },
        {
            "name": "FarmConfigOption",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "UpdateRewardRps"
                    },
                    {
                        "name": "UpdateRewardMinClaimDuration"
                    },
                    {
                        "name": "WithdrawAuthority"
                    },
                    {
                        "name": "DepositWarmupPeriod"
                    },
                    {
                        "name": "WithdrawCooldownPeriod"
                    },
                    {
                        "name": "RewardType"
                    },
                    {
                        "name": "RpsDecimals"
                    },
                    {
                        "name": "LockingMode"
                    },
                    {
                        "name": "LockingStartTimestamp"
                    },
                    {
                        "name": "LockingDuration"
                    },
                    {
                        "name": "LockingEarlyWithdrawalPenaltyBps"
                    },
                    {
                        "name": "DepositCapAmount"
                    },
                    {
                        "name": "SlashedAmountSpillAddress"
                    },
                    {
                        "name": "ScopePricesAccount"
                    },
                    {
                        "name": "ScopeOraclePriceId"
                    },
                    {
                        "name": "ScopeOracleMaxAge"
                    },
                    {
                        "name": "UpdateRewardScheduleCurvePoint"
                    },
                    {
                        "name": "UpdatePendingFarmAdmin"
                    }
                ]
            }
        },
        {
            "name": "TimeUnit",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Seconds"
                    },
                    {
                        "name": "Slots"
                    }
                ]
            }
        },
        {
            "name": "RewardType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Proportional"
                    },
                    {
                        "name": "Constant"
                    }
                ]
            }
        },
        {
            "name": "LockingMode",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "None"
                    },
                    {
                        "name": "Continuous"
                    },
                    {
                        "name": "WithExpiry"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "StakeZero",
            "msg": "Cannot stake 0 amount"
        },
        {
            "code": 6001,
            "name": "UnstakeZero",
            "msg": "Cannot unstake 0 amount"
        },
        {
            "code": 6002,
            "name": "NothingToUnstake",
            "msg": "Nothing to unstake"
        },
        {
            "code": 6003,
            "name": "NoRewardToHarvest",
            "msg": "No reward to harvest"
        },
        {
            "code": 6004,
            "name": "NoRewardInList",
            "msg": "Reward not present in reward list"
        },
        {
            "code": 6005,
            "name": "RewardAlreadyInitialized",
            "msg": "Reward already initialized"
        },
        {
            "code": 6006,
            "name": "MaxRewardNumberReached",
            "msg": "Max number of reward tokens reached"
        },
        {
            "code": 6007,
            "name": "RewardDoesNotExist",
            "msg": "Reward does not exist"
        },
        {
            "code": 6008,
            "name": "WrongRewardVaultAccount",
            "msg": "Reward vault exists but the account is wrong"
        },
        {
            "code": 6009,
            "name": "RewardVaultMismatch",
            "msg": "Reward vault pubkey does not match staking pool vault"
        },
        {
            "code": 6010,
            "name": "RewardVaultAuthorityMismatch",
            "msg": "Reward vault authority pubkey does not match staking pool vault"
        },
        {
            "code": 6011,
            "name": "NothingStaked",
            "msg": "Nothing staked, cannot collect any rewards"
        },
        {
            "code": 6012,
            "name": "IntegerOverflow",
            "msg": "Integer overflow"
        },
        {
            "code": 6013,
            "name": "ConversionFailure",
            "msg": "Conversion failure"
        },
        {
            "code": 6014,
            "name": "UnexpectedAccount",
            "msg": "Unexpected account in instruction"
        },
        {
            "code": 6015,
            "name": "OperationForbidden",
            "msg": "Operation forbidden"
        },
        {
            "code": 6016,
            "name": "MathOverflow",
            "msg": "Mathematical operation with overflow"
        },
        {
            "code": 6017,
            "name": "MinClaimDurationNotReached",
            "msg": "Minimum claim duration has not been reached"
        },
        {
            "code": 6018,
            "name": "RewardsVaultHasDelegate",
            "msg": "Reward vault has a delegate"
        },
        {
            "code": 6019,
            "name": "RewardsVaultHasCloseAuthority",
            "msg": "Reward vault has a close authority"
        },
        {
            "code": 6020,
            "name": "FarmVaultHasDelegate",
            "msg": "Farm vault has a delegate"
        },
        {
            "code": 6021,
            "name": "FarmVaultHasCloseAuthority",
            "msg": "Farm vault has a close authority"
        },
        {
            "code": 6022,
            "name": "RewardsTreasuryVaultHasDelegate",
            "msg": "Reward vault has a delegate"
        },
        {
            "code": 6023,
            "name": "RewardsTreasuryVaultHasCloseAuthority",
            "msg": "Reward vault has a close authority"
        },
        {
            "code": 6024,
            "name": "UserAtaRewardVaultMintMissmatch",
            "msg": "User ata and reward vault have different mints"
        },
        {
            "code": 6025,
            "name": "UserAtaFarmTokenMintMissmatch",
            "msg": "User ata and farm token have different mints"
        },
        {
            "code": 6026,
            "name": "TokenFarmTokenMintMissmatch",
            "msg": "Token mint and farm token have different mints"
        },
        {
            "code": 6027,
            "name": "RewardAtaRewardMintMissmatch",
            "msg": "Reward ata mint is different than reward mint"
        },
        {
            "code": 6028,
            "name": "RewardAtaOwnerNotFarmAdmin",
            "msg": "Reward ata owner is different than farm admin"
        },
        {
            "code": 6029,
            "name": "InvalidGlobalConfigMode",
            "msg": "Mode to update global_config is invalid"
        },
        {
            "code": 6030,
            "name": "RewardIndexOutOfRange",
            "msg": "Reward Index is higher than number of rewards"
        },
        {
            "code": 6031,
            "name": "NothingToWithdraw",
            "msg": "No tokens available to withdraw"
        },
        {
            "code": 6032,
            "name": "UserDelegatedFarmNonDelegatedMissmatch",
            "msg": "user, user_ref, authority and payer must match for non-delegated farm"
        },
        {
            "code": 6033,
            "name": "AuthorityFarmDelegateMissmatch",
            "msg": "Authority must match farm delegate authority"
        },
        {
            "code": 6034,
            "name": "FarmNotDelegated",
            "msg": "Farm not delegated, can not set stake"
        },
        {
            "code": 6035,
            "name": "FarmDelegated",
            "msg": "Operation not allowed for delegated farm"
        },
        {
            "code": 6036,
            "name": "UnstakeNotElapsed",
            "msg": "Unstake lockup period is not elapsed. Deposit is locked until end of unstake period"
        },
        {
            "code": 6037,
            "name": "PendingWithdrawalNotWithdrawnYet",
            "msg": "Pending withdrawal already exist and not withdrawn yet"
        },
        {
            "code": 6038,
            "name": "DepositZero",
            "msg": "Cannot deposit zero amount directly to farm vault"
        },
        {
            "code": 6039,
            "name": "InvalidConfigValue",
            "msg": "Invalid config value"
        },
        {
            "code": 6040,
            "name": "InvalidPenaltyPercentage",
            "msg": "Invalid penalty percentage"
        },
        {
            "code": 6041,
            "name": "EarlyWithdrawalNotAllowed",
            "msg": "Early withdrawal not allowed"
        },
        {
            "code": 6042,
            "name": "InvalidLockingTimestamps",
            "msg": "Invalid locking timestamps"
        },
        {
            "code": 6043,
            "name": "InvalidRpsCurvePoint",
            "msg": "Invalid reward rate curve point"
        },
        {
            "code": 6044,
            "name": "InvalidTimestamp",
            "msg": "Invalid timestamp"
        },
        {
            "code": 6045,
            "name": "DepositCapReached",
            "msg": "Deposit cap reached"
        },
        {
            "code": 6046,
            "name": "MissingScopePrices",
            "msg": "Missing Scope Prices"
        },
        {
            "code": 6047,
            "name": "ScopeOraclePriceTooOld",
            "msg": "Scope Oracle Price Too Old"
        },
        {
            "code": 6048,
            "name": "InvalidOracleConfig",
            "msg": "Invalid Oracle Config"
        },
        {
            "code": 6049,
            "name": "CouldNotDeserializeScope",
            "msg": "Could not deserialize scope"
        }
    ]
}
