[ { "inputs": [ { "internalType": "bytes", "name": "_configData", "type": "bytes" }, { "internalType": "bytes", "name": "_immutables", "type": "bytes" }, { "internalType": "bytes", "name": "_customConfigData", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlRevoked", "type": "error" }, { "inputs": [], "name": "BadProtocolFee", "type": "error" }, { "inputs": [], "name": "BadSwapper", "type": "error" }, { "inputs": [], "name": "BorrowerSolvent", "type": "error" }, { "inputs": [], "name": "ExceedsBorrowLimit", "type": "error" }, { "inputs": [], "name": "ExceedsDepositLimit", "type": "error" }, { "inputs": [], "name": "ExceedsMaxOracleDeviation", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "_borrow", "type": "uint256" }, { "internalType": "uint256", "name": "_collateral", "type": "uint256" }, { "internalType": "uint256", "name": "_exchangeRate", "type": "uint256" } ], "name": "Insolvent", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "uint256", "name": "_request", "type": "uint256" } ], "name": "InsufficientAssetsInContract", "type": "error" }, { "inputs": [], "name": "InterestPaused", "type": "error" }, { "inputs": [], "name": "InvalidApproveBorrowDelegation", "type": "error" }, { "inputs": [], "name": "InvalidBorrower", "type": "error" }, { "inputs": [], "name": "InvalidDelegator", "type": "error" }, { "inputs": [], "name": "InvalidOnBehalfOf", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "_expected", "type": "address" }, { "internalType": "address", "name": "_actual", "type": "address" } ], "name": "InvalidPath", "type": "error" }, { "inputs": [], "name": "InvalidReceiver", "type": "error" }, { "inputs": [], "name": "LiquidatePaused", "type": "error" }, { "inputs": [], "name": "OnlyPendingTimelock", "type": "error" }, { "inputs": [], "name": "OnlyProtocolOrOwner", "type": "error" }, { "inputs": [], "name": "OnlyTimelock", "type": "error" }, { "inputs": [], "name": "OnlyTimelockOrOwner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "_blockTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "PastDeadline", "type": "error" }, { "inputs": [], "name": "RepayPaused", "type": "error" }, { "inputs": [], "name": "SetterRevoked", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "_minOut", "type": "uint256" }, { "internalType": "uint256", "name": "_actual", "type": "uint256" } ], "name": "SlippageTooHigh", "type": "error" }, { "inputs": [], "name": "WithdrawPaused", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "AddCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "interestEarned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesShare", "type": "uint256" } ], "name": "AddInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_borrower", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_borrowAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_sharesAdded", "type": "uint256" } ], "name": "BorrowAsset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "newFee", "type": "uint32" } ], "name": "ChangeFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_collateralForLiquidator", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_sharesToLiquidate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_amountLiquidatorToRepay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_feesAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_sharesToAdjust", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_amountToAdjust", "type": "uint256" } ], "name": "Liquidate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "PauseInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "PauseLiquidate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "PauseRepay", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "PauseWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_collateralAmount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "_receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_borrower", "type": "address" } ], "name": "RemoveCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountToRepay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "RepayAsset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_swapperAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_collateralToSwap", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_amountAssetOut", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_sharesRepaid", "type": "uint256" } ], "name": "RepayAssetWithCollateral", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RevokeLiquidateAccessControl", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RevokeMaxLTVSetter", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RevokeRepayAccessControl", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RevokeWithdrawAccessControl", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "SetBorrowLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldCircuitBreaker", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newCircuitBreaker", "type": "address" } ], "name": "SetCircuitBreaker", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "SetDepositLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldCleanLiquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldDirtyLiquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldProtocolLiquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newCleanLiquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDirtyLiquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newProtocolLiquidationFee", "type": "uint256" } ], "name": "SetLiquidationFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMaxLTV", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMaxLTV", "type": "uint256" } ], "name": "SetMaxLTV", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldOracle", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "oldMaxOracleDeviation", "type": "uint32" }, { "indexed": false, "internalType": "address", "name": "newOracle", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "newMaxOracleDeviation", "type": "uint32" } ], "name": "SetOracleInfo", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldRateContract", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRateContract", "type": "address" } ], "name": "SetRateContract", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "swapper", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approval", "type": "bool" } ], "name": "SetSwapper", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_delegator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "_enabled", "type": "bool" } ], "name": "SetWhitelistedDelegators", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousTimelock", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newTimelock", "type": "address" } ], "name": "TimelockTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousTimelock", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newTimelock", "type": "address" } ], "name": "TimelockTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lowExchangeRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "highExchangeRate", "type": "uint256" } ], "name": "UpdateExchangeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldRatePerSec", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldFullUtilizationRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newRatePerSec", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newFullUtilizationRate", "type": "uint256" } ], "name": "UpdateRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_fromUser", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_toUser", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "UserBorrowAllowanceDelegated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oracle", "type": "address" } ], "name": "WarnOracleData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint128", "name": "shares", "type": "uint128" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountToTransfer", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "WithdrawFees", "type": "event" }, { "inputs": [], "name": "DEPLOYER_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "acceptTransferTimelock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_collateralAmount", "type": "uint256" }, { "internalType": "address", "name": "_borrower", "type": "address" } ], "name": "addCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_returnAccounting", "type": "bool" } ], "name": "addInterest", "outputs": [ { "internalType": "uint256", "name": "_interestEarned", "type": "uint256" }, { "internalType": "uint256", "name": "_feesAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_feesShare", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "lastBlock", "type": "uint32" }, { "internalType": "uint32", "name": "feeToProtocolRate", "type": "uint32" }, { "internalType": "uint64", "name": "lastTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "ratePerSec", "type": "uint64" }, { "internalType": "uint64", "name": "fullUtilizationRate", "type": "uint64" } ], "internalType": "struct SturdyPairCore.CurrentRateInfo", "name": "_currentRateInfo", "type": "tuple" }, { "components": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "internalType": "struct VaultAccount", "name": "_totalAsset", "type": "tuple" }, { "components": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "internalType": "struct VaultAccount", "name": "_totalBorrow", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegatee", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "approveBorrowDelegation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_borrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_collateralAmount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "borrowAsset", "outputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_borrowAmount", "type": "uint256" }, { "internalType": "address", "name": "_onBehalfOf", "type": "address" } ], "name": "borrowAssetOnBehalfOf", "outputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "borrowLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_newFee", "type": "uint32" } ], "name": "changeFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "circuitBreakerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cleanLiquidationFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collateralContract", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRateInfo", "outputs": [ { "internalType": "uint32", "name": "lastBlock", "type": "uint32" }, { "internalType": "uint32", "name": "feeToProtocolRate", "type": "uint32" }, { "internalType": "uint64", "name": "lastTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "ratePerSec", "type": "uint64" }, { "internalType": "uint64", "name": "fullUtilizationRate", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "_sharesReceived", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dirtyLiquidationFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exchangeRateInfo", "outputs": [ { "internalType": "address", "name": "oracle", "type": "address" }, { "internalType": "uint32", "name": "maxOracleDeviation", "type": "uint32" }, { "internalType": "uint184", "name": "lastTimestamp", "type": "uint184" }, { "internalType": "uint256", "name": "lowExchangeRate", "type": "uint256" }, { "internalType": "uint256", "name": "highExchangeRate", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getConstants", "outputs": [ { "internalType": "uint256", "name": "_LTV_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_LIQ_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_UTIL_PREC", "type": "uint256" }, { "internalType": "uint256", "name": "_FEE_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_EXCHANGE_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_DEVIATION_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_RATE_PRECISION", "type": "uint256" }, { "internalType": "uint256", "name": "_MAX_PROTOCOL_FEE", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getPairAccounting", "outputs": [ { "internalType": "uint128", "name": "_totalAssetAmount", "type": "uint128" }, { "internalType": "uint128", "name": "_totalAssetShares", "type": "uint128" }, { "internalType": "uint128", "name": "_totalBorrowAmount", "type": "uint128" }, { "internalType": "uint128", "name": "_totalBorrowShares", "type": "uint128" }, { "internalType": "uint256", "name": "_totalCollateral", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "getUserSnapshot", "outputs": [ { "internalType": "uint256", "name": "_userAssetShares", "type": "uint256" }, { "internalType": "uint256", "name": "_userBorrowShares", "type": "uint256" }, { "internalType": "uint256", "name": "_userCollateralBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isInterestPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isLiquidateAccessControlRevoked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isLiquidatePaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isMaxLTVSetterRevoked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isRepayAccessControlRevoked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isRepayPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWithdrawAccessControlRevoked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWithdrawPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_sharesToLiquidate", "type": "uint128" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" }, { "internalType": "address", "name": "_borrower", "type": "address" } ], "name": "liquidate", "outputs": [ { "internalType": "uint256", "name": "_collateralForLiquidator", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "_maxAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxLTV", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "_maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "_maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "_maxAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isPaused", "type": "bool" } ], "name": "pauseInterest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isPaused", "type": "bool" } ], "name": "pauseLiquidate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isPaused", "type": "bool" } ], "name": "pauseRepay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isPaused", "type": "bool" } ], "name": "pauseWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingTimelockAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "previewAddInterest", "outputs": [ { "internalType": "uint256", "name": "_interestEarned", "type": "uint256" }, { "internalType": "uint256", "name": "_feesAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_feesShare", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "lastBlock", "type": "uint32" }, { "internalType": "uint32", "name": "feeToProtocolRate", "type": "uint32" }, { "internalType": "uint64", "name": "lastTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "ratePerSec", "type": "uint64" }, { "internalType": "uint64", "name": "fullUtilizationRate", "type": "uint64" } ], "internalType": "struct SturdyPairCore.CurrentRateInfo", "name": "_newCurrentRateInfo", "type": "tuple" }, { "components": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "internalType": "struct VaultAccount", "name": "_totalAsset", "type": "tuple" }, { "components": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "internalType": "struct VaultAccount", "name": "_totalBorrow", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "_sharesReceived", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pricePerShare", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolLiquidationFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rateContract", "outputs": [ { "internalType": "contract IRateCalculatorV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "_amountToReturn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_collateralAmount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "removeCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_collateralAmount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_borrower", "type": "address" } ], "name": "removeCollateralFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceTimelock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_borrower", "type": "address" } ], "name": "repayAsset", "outputs": [ { "internalType": "uint256", "name": "_amountToRepay", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_swapperAddress", "type": "address" }, { "internalType": "uint256", "name": "_collateralToSwap", "type": "uint256" }, { "internalType": "uint256", "name": "_amountAssetOutMin", "type": "uint256" }, { "internalType": "address[]", "name": "_path", "type": "address[]" } ], "name": "repayAssetWithCollateral", "outputs": [ { "internalType": "uint256", "name": "_amountAssetOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeLiquidateAccessControl", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeMaxLTVSetter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeRepayAccessControl", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeWithdrawAccessControl", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limit", "type": "uint256" } ], "name": "setBorrowLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newCircuitBreaker", "type": "address" } ], "name": "setCircuitBreaker", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limit", "type": "uint256" } ], "name": "setDepositLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newCleanLiquidationFee", "type": "uint256" }, { "internalType": "uint256", "name": "_newDirtyLiquidationFee", "type": "uint256" }, { "internalType": "uint256", "name": "_newProtocolLiquidationFee", "type": "uint256" } ], "name": "setLiquidationFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newMaxLTV", "type": "uint256" } ], "name": "setMaxLTV", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOracle", "type": "address" }, { "internalType": "uint32", "name": "_newMaxOracleDeviation", "type": "uint32" } ], "name": "setOracle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newRateContract", "type": "address" } ], "name": "setRateContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_swapper", "type": "address" }, { "internalType": "bool", "name": "_approval", "type": "bool" } ], "name": "setSwapper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "bool", "name": "_enabled", "type": "bool" } ], "name": "setWhitelistedDelegators", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "swappers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "timelockAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "bool", "name": "_roundUp", "type": "bool" }, { "internalType": "bool", "name": "_previewInterest", "type": "bool" } ], "name": "toAssetAmount", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_roundUp", "type": "bool" }, { "internalType": "bool", "name": "_previewInterest", "type": "bool" } ], "name": "toAssetShares", "outputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "bool", "name": "_roundUp", "type": "bool" }, { "internalType": "bool", "name": "_previewInterest", "type": "bool" } ], "name": "toBorrowAmount", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_roundUp", "type": "bool" }, { "internalType": "bool", "name": "_previewInterest", "type": "bool" } ], "name": "toBorrowShares", "outputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAsset", "outputs": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrow", "outputs": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "shares", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalCollateral", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newTimelock", "type": "address" } ], "name": "transferTimelock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateExchangeRate", "outputs": [ { "internalType": "bool", "name": "_isBorrowAllowed", "type": "bool" }, { "internalType": "uint256", "name": "_lowExchangeRate", "type": "uint256" }, { "internalType": "uint256", "name": "_highExchangeRate", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userBorrowAllowances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userBorrowShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userCollateralBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "_major", "type": "uint256" }, { "internalType": "uint256", "name": "_minor", "type": "uint256" }, { "internalType": "uint256", "name": "_patch", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelistedDelegators", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_shares", "type": "uint128" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "withdrawFees", "outputs": [ { "internalType": "uint256", "name": "_amountToTransfer", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101008060405234620008bf57620071448038038091620000218285620012f5565b83398101606082820312620008bf5781516001600160401b038111620008bf57816200004f91840162001319565b60208301519092906001600160401b038111620008bf57826200007491830162001319565b60408201519092906001600160401b038111620008bf5762000097920162001319565b60405192620000a684620012d9565b6000845260405192620000b984620012d9565b60008452600180546001600160a01b03191633908117909155620000dd90620013fc565b600019600555600019600655606081805181010312620008bf576200017b62000109602083016200138f565b916200012660606200011e604084016200138f565b92016200138f565b6001546001600160a01b0391821691829082167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6600080a36001600160a01b031916176001556001600160a01b0316620013fc565b33608052600480546001600160a01b0319166001600160a01b039290921691909117905583516001600160401b03811162000e9b57600b54600181811c9116801562001296575b602082101462000f9c57601f811162001230575b506020601f8211600114620011c0578192939495600092620011b4575b50508160011b916000199060031b1c191617600b555b82516001600160401b03811162000e9b57600c54600181811c91168015620011a9575b602082101462000f9c57601f81116200113f575b506020601f8211600114620010b55781929394600092620010a9575b50508160011b916000199060031b1c191617600c555b6001600d5561012081805181010312620008bf5762000294602082016200138f565b620002a2604083016200138f565b91620002b1606082016200138f565b60808201519063ffffffff82168203620008bf57620002d360a084016200138f565b91620002e260c08501620013a4565b60e0850151610100860151610120909601516001600160a01b0397881660a0529690971660c0526016544260001981011162000814574360001981011162000814574260001990810160401b6fffffffffffffffff000000000000000016600160801b600160c01b0390921660c09390931b6001600160c01b031990811693909317919091174390910163ffffffff1617601655601780549091166001600160a01b039384161760a09290921b63ffffffff60a01b16919091179055601280546001600160a01b03191692909116919091179055600f819055801562015f90808302839004141715620008145762015f90620186a0910204601055601155600e558051810190606081830312620008bf5760208101516001600160401b038111620008bf576200041b9060208085019184010162001319565b604082015190926001600160401b038211620008bf576060916020806200044793019185010162001319565b9101519060ff82168203620008bf5782516001600160401b03811162000e9b57601454600181811c911680156200109e575b602082101462000f9c57601f811162001038575b506020601f821160011462000fc9578192939460009262000fbd575b50508160011b916000199060031b1c1916176014555b8051906001600160401b03821162000e9b5760155490600182811c9216801562000fb2575b602083101462000f9c5781601f84931162000f3b575b50602090601f831160011462000ebd5760009262000eb1575b50508160011b916000199060031b1c1916176015555b60e052600060806040516200053e81620012a1565b82815282602082015282604082015282606082015201526040516200056381620012a1565b60165463ffffffff8116825263ffffffff8160201c16602083015260018060401b038160401c16604083015260018060401b038160801c16606083015260c01c60808201526040518061010081011060018060401b036101008301111762000e9b5761010081016040526000815260006020820152600060408201526000606082015260006080820152600060a08201526040516200060281620012bd565b600081526000602082015260c08201526040516200062081620012bd565b6000808252602082015260e082015260408201516001600160401b03164214158062000e8a575b62000b22575b8051620008e1575b50506040516200066581620012a1565b6017546001600160a01b038116825260a081901c63ffffffff1660208301526018546001600160b81b038116604084018190526019546060850152601a5460808501524214620008d95760405163bd9a548b60e01b8152906060826004816001600160a01b0387165afa908115620008cd576000809360009362000863575b5093604093929160008051602062007124833981519152956200082a575b60018060b81b03421691828689015284606089015283608089015260018060a01b0388511663ffffffff60a01b60208a015160a01b169160018060c01b031916171760175560018060b81b031916176018558160195580601a5582519182526020820152a15b6200077d6080820151606083015190620013b9565b80620186a00290620186a082040362000814576080620007a092015190620013db565b50604051615c8b9081620014798239608051818181610fa40152614538015260a051818181610c04015281816111ec0152818161129e015281816113860152818161166c015281816134250152613685015260c05181818161118d01528181611758015261559a015260e051816134890152f35b634e487b7160e01b600052601160045260246000fd5b7ffc131c36b7e444dacda44901fd43641dcdcfdc43fe9e2601b3c1dd87061db9e5602060018060a01b038951168751908152a162000702565b92505091506060813d606011620008c4575b816200088460609383620012f5565b81010312620008bf578051908115158203620008bf5760208101516040909101519092909160008051602062007124833981519152620006e4565b600080fd5b3d915062000875565b6040513d6000823e3d90fd5b505062000768565b6060810151917f2b5229f33f1d24d5baab718e1e25d0d86195a9b6d786c2c0868edfb21a460e256080808401519460a0850151957fc63977c8e2362a31182dc8e89a52252f9836922738e0abcfc0de6924972eafe58360018060401b0360608801511660018060401b03828901511660018060401b0360208b01511660018060401b0360408c01511691604051938452602084015260408301526060820152a160018060401b0360208701511660405192835260208301526040820152856060820152a16020828101516001600160401b03808216606085015260408086015180831660808088019190915242938416878401524363ffffffff168088529686015194811b600160801b600160c01b03169390921b6fffffffffffffffff00000000000000001693851b67ffffffff0000000016909517929092171760c093841b6001600160c01b0319161760165591830151805190820151831b6001600160801b03199081166001600160801b0392831617601b5560e090940151805192015190921b909216911617601c558062000a7c575b8062000655565b301562000add5762000a9181600a5462001450565b600a55306000526008602052604060002081815401905560405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203093a33862000a75565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b6001815260405162000b3481620012bd565b601b546001600160801b038116825260801c602082015260c082015260405162000b5e81620012bd565b601c546001600160801b038116825260801c602082015260e0820152604082015162000b94906001600160401b031642620013b9565b60c0820151516001600160801b031662000e43576000905b60125460808501516040805163cd3181d560e01b81526004810185905260248101959095526001600160401b03909116604485015290839060649082906001600160a01b03165afa8015620008cd5760009260009162000ddb575b506001600160401b039081166040850152909116602083015260e082015151670de0b6b3a76400009162000c629162000c4d916001600160801b039190911690620013c7565b60208401516001600160401b031690620013c7565b04806060830152801515908162000db3575b508062000d88575b156200064d57606081015160e0820151805190916001600160801b039162000ca99183169083166200145e565b169052606081015160c0820151805190916001600160801b039162000cd39183169083166200145e565b16905263ffffffff6020830151168062000cef575b506200064d565b62000d2c620186a062000d0b62000d52936060860151620013c7565b046080840181905260c0840151602001516001600160801b031690620013c7565b60c083015151608084015162000d4b916001600160801b0316620013b9565b90620013db565b60a0820181905260c0820151602001805190916001600160801b039162000d7e9183169083166200145e565b1690523862000ce8565b50606081015160c0820151516001600160801b039162000dab9183169062001450565b111562000c7c565b60e0830151516001600160801b03925062000dd2919083169062001450565b11153862000c74565b9250506040823d60401162000e3a575b8162000dfa60409383620012f5565b81010312620008bf5762000c4d62000c62918362000e2f602062000e27670de0b6b3a764000097620013a4565b9201620013a4565b925093509162000c07565b3d915062000deb565b60e0820151516001600160801b0316620186a0808202048103620008145760c08301515162000e83916001600160801b0390911690620186a002620013db565b9062000bac565b5060ff60075460301c161562000647565b634e487b7160e01b600052604160045260246000fd5b01519050388062000513565b6015600090815293506000805160206200710483398151915291905b601f198416851062000f1f576001945083601f1981161062000f05575b505050811b0160155562000529565b015160001960f88460031b161c1916905538808062000ef6565b8181015183556020948501946001909301929091019062000ed9565b601560005290915060008051602062007104833981519152601f840160051c81016020851062000f94575b90849392915b601f830160051c8201811062000f84575050620004fa565b6000815585945060010162000f6c565b508062000f66565b634e487b7160e01b600052602260045260246000fd5b91607f1691620004e4565b015190503880620004a9565b601460005260206000209060005b601f19841681106200101f5750600193949583601f1981161062001005575b505050811b01601455620004bf565b015160001960f88460031b161c1916905538808062000ff6565b9091602060018192858a01518155019301910162000fd7565b60146000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec601f830160051c81016020841062001096575b601f830160051c82018110620010895750506200048d565b6000815560010162001071565b508062001071565b90607f169062000479565b0151905038806200025c565b600c60009081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79190601f198416905b81811062001126575095836001959697106200110c575b505050811b01600c5562000272565b015160001960f88460031b161c19169055388080620010fd565b9192602060018192868b015181550194019201620010e6565b600c6000527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f830160051c810191602084106200119e575b601f0160051c01905b81811062001191575062000240565b6000815560010162001182565b909150819062001179565b90607f16906200022c565b015190503880620001f3565b600b60005260206000209060005b601f198416811062001217575060019394959683601f19811610620011fd575b505050811b01600b5562000209565b015160001960f88460031b161c19169055388080620011ee565b9091602060018192858b015181550193019101620011ce565b600b6000527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9601f830160051c8101602084106200128e575b601f830160051c8201811062001281575050620001d6565b6000815560010162001269565b508062001269565b90607f1690620001c2565b60a081019081106001600160401b0382111762000e9b57604052565b604081019081106001600160401b0382111762000e9b57604052565b602081019081106001600160401b0382111762000e9b57604052565b601f909101601f19168101906001600160401b0382119082101762000e9b57604052565b919080601f84011215620008bf5782516001600160401b03811162000e9b57602090604051926200135483601f19601f8501160185620012f5565b818452828287010111620008bf5760005b8181106200137b57508260009394955001015290565b858101830151848201840152820162001365565b51906001600160a01b0382168203620008bf57565b51906001600160401b0382168203620008bf57565b919082039182116200081457565b818102929181159184041417156200081457565b8115620013e6570490565b634e487b7160e01b600052601260045260246000fd5b600380546001600160a01b0319908116909155600280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b919082018092116200081457565b6001600160801b039182169082160191908211620008145756fe6080604052600436101561001257600080fd5b60003560e01c806301e1d11414613cdf57806302ce728f14613ca25780630475260e14613c4f57806306fdde0314613b9157806307a2d13a14613b6457806308a0c37514613add578063090f3f5014613ab6578063095ea7b314613a905780630a28a47714613a635780630c70661d14613a3d578063115a334c14613a1a57806311a2e4bc146139fc57806318160ddd146139db5780631bc23cf91461395e5780631c2591d3146139265780631c6c95971461388a57806323b872dd146137cc57806327c151dc146134ad578063313ce5671461346f57806334680fe51461344957806338d52e0f1461340557806339030864146133b857806339509351146133665780633d417d2d146132cc5780633e9139be1461327b5780633f2617cb146131f35780633f4ba83a14613058578063402d267d14612ffe5780634501409514612f945780634732428c14612f765780634929242714612f4f5780634ac8eb5f14612f315780634b4b418e14612eb05780634bc66f3214612e895780634c18a4fb14612dfe5780634c41799514612daf5780634cdad50614611a4d5780634cefcccb14612d705780634f8b4ae714612cdf5780634fd422df14612ca557806354fd4d5014612c7b57806359508a1014612b2057806367800b5f14612afa57806369026e8814612aaf5780636b96668f14612a335780636e553f65146129ab57806370a0823114612971578063715018a61461290d578063721b0a47146125a257806379ba5097146124ce5780637d37bdd7146124965780637ec4b571146124595780637ecefa6e146124025780638142dd53146122fb5780638285ef40146122c957806382beee89146122525780638456cb591461209d578063858f1e681461200f5780638cad7fbe14611fd05780638da5cb5b14611fa95780638f791f8b14611e5857806393f46f6414611e1b57806394bf804d14611d6857806395d14ca814611d1157806395d89b4114611c1057806399530b0614611b965780639a295e7314611b42578063a457c2d714611a83578063a9059cbb14611a52578063b3d7f6b914611a4d578063b460af94146119e1578063b5af3062146119a7578063b68d0a0914611940578063b7db54f51461191d578063ba08765214611873578063bbb096241461184d578063bdc8144b14611801578063c58e4df6146117dc578063c63d75b61461177c578063c6e1c7c914611738578063c6e6f59214610753578063ca2298fe146110cc578063cacf3b581461109d578063cadac4791461104c578063cdd72d5214610feb578063ce96cb7714610fc8578063d2a156e014610f84578063d41ddc9614610e87578063d905777e14610e64578063daf33f2a14610d66578063dd62ed3e14610d14578063e30c397814610ced578063e551d11d14610ccf578063e5f13b16146109b2578063e7a3317414610966578063e8596f721461091b578063e86242a81461089d578063eafecffa1461087f578063ebd462cb146107cd578063ecf70858146107af578063eee2421914610788578063ef8b30f714610753578063f211c3901461072d578063f2fde38b146106c3578063f384bd05146106a5578063f54fd600146105d3578063f6ccaad41461056d578063f9557ccb146105375763fbbbf94c146104cb57600080fd5b346105325760003660031901126105325760a060175476ffffffffffffffffffffffffffffffffffffffffffffff60185416601954601a549163ffffffff604051946001600160a01b0381168652861c166020850152604084015260608301526080820152f35b600080fd5b3461053257600036600319011261053257601b54604080516001600160801b038316815260809290921c602083015290f35b0390f35b3461053257600036600319011261053257610586615889565b6001600160a01b0319806000541660005560015490336001600160a01b0383167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6600080a3163317600155005b34610532576040366003190112610532576105ec613d5a565b6024358015158061067a575b6106505733600052602080526001600160a01b03604060002092169182600052602052806040600020556040519081527f399f462d2df28f9d69d52cdcfd7e6ef0598b231d0b9baa75ae424e43195ffe8160203392a3005b60046040517fadc9170e000000000000000000000000000000000000000000000000000000008152fd5b50336000526020805260406000206001600160a01b03831660005260205260406000205415156105f8565b34610532576000366003190112610532576020600e54604051908152f35b34610532576020366003190112610532576106dc613d5a565b6106e4613eda565b6001600160a01b0380911690816001600160a01b03196003541617600355600254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700600080a3005b3461053257600036600319011261053257602060ff60075460301c166040519015158152f35b346105325760203660031901126105325760206107806107716146ae565b50935050505060043590615b18565b604051908152f35b346105325760003660031901126105325760206001600160a01b0360125416604051908152f35b34610532576000366003190112610532576020600654604051908152f35b34610532576020366003190112610532576107e6613d9c565b8015610872576107f46144d2565b6007549060ff8260181c16610848577fc56dd3e14f5af3a74c61b7cdf855a3d8ab4401c78c0622a4d312de8a8f8736a29160209115159062ff00008260101b169062ff0000191617600755604051908152a1005b60046040517f1ada47b8000000000000000000000000000000000000000000000000000000008152fd5b61087a614572565b6107f4565b34610532576000366003190112610532576020601154604051908152f35b6040366003190112610532576108b1613d5a565b7ee87392aa4ff46a408dc81eaa7d09885b4ec4e0c3c6fbc3e7310b53f558176360206001600160a01b036108e3613dab565b936108ec613eda565b169283600052602182526109108160406000209060ff801983541691151516179055565b6040519015158152a2005b34610532576000366003190112610532576109346144d2565b60006005557fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f6386602060405160008152a1005b34610532576020366003190112610532577fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f638660206004356109a5614572565b80600555604051908152a1005b34610532576060366003190112610532576004356024356109d1613d86565b906109da61460d565b6001600160a01b038216908115610ca5576109f3614b01565b5050505050600554936001600160801b0394610a138287601c5416613f32565b11610c7b57610a20614dc8565b505015610c6a5781610a3792610c58575b50614454565b610a3f6142a9565b9284610a5981610a4d614283565b511682875116906145c9565b1685831690818110610c2f5750610a708186615aae565b9486610a7f85828451166147a6565b168152602096610ac08189840193610a9c828b16838751166147a6565b94828616905251166001600160801b03166001600160801b0319601c541617601c55565b6001600160801b0319601c549260801b16911617601c5533600052601f86526040600020610aef868254613f32565b9055308403610bc3575b5050604080516001600160801b039290921682526020820184905233917f01348584ec81ac7acd52b7d66d9ade986dd909f3d513881c190fc31c90527efe9190a3610b426143f7565b50601a54610b508133615455565b15610b6357506001600d55604051908152f35b82601e610b85610b716142a9565b33600052601f845260406000205490615be3565b913360005252610bbf60406000205492604051938493633b49de0f60e21b8552600485016040919493926060820195825260208201520152565b0390fd5b60405163a9059cbb60e01b878201526001600160a01b0390921660248301526044820152610c2890610c0281606481015b03601f198101835282614261565b7f00000000000000000000000000000000000000000000000000000000000000006158c7565b8480610af9565b6040516362ddb6d760e11b815260048101919091526001600160801b0384166024820152604490fd5b610c64903390336154fa565b85610a31565b600460405163345513d960e01b8152fd5b60046040517f97ba4de3000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1e4ec46b000000000000000000000000000000000000000000000000000000008152fd5b34610532576000366003190112610532576020600554604051908152f35b346105325760003660031901126105325760206001600160a01b0360035416604051908152f35b3461053257604036600319011261053257610d2d613d5a565b610d35613d70565b906001600160a01b038091166000526009602052604060002091166000526020526020604060002054604051908152f35b3461053257604036600319011261053257610d7f613ec4565b610d87613d70565b90610d90613eda565b806001600160a01b038316928315610ca557602093610dad614283565b926001600160801b0380911615610e4c575b917faf48306b6b4f0ba30d00f05b21559d8d29934142980a553d8a014780c6c7e4529391610e1460809487169383610df78683615be3565b98610e038733306140f5565b3092610e0e8b614454565b9061516a565b30600052601e8752610e2e604060002054923090846155c3565b604051928352868301528460408301526060820152a1604051908152f35b30600090815260088752604090205481169450610dbf565b34610532576020366003190112610532576020610780610e82613d5a565b614378565b3461053257604036600319011261053257610ea0613d70565b610ea861460d565b6001600160a01b03811615610ca557610ebf614b01565b505050505033600052601f602052604060002054610f65575b610ee69033906004356155c3565b610eee6143f7565b50601a54610efc8133615455565b15610f08576001600d55005b610f28610f136142a9565b33600052601f60205260406000205490615be3565b33600052601e602052610bbf60406000205492604051938493633b49de0f60e21b8552600485016040919493926060820195825260208201520152565b610f6d614dc8565b5050610ed857600460405163345513d960e01b8152fd5b346105325760003660031901126105325760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610532576020366003190112610532576020610780610fe6613d5a565b6142dc565b346105325760003660031901126105325760a06110066146ae565b9350935050506001600160801b03908160208185511694015116916020818351169201511690601d54926040519485526020850152604084015260608301526080820152f35b3461053257604036600319011261053257611065613d70565b61106d61460d565b6001600160a01b03811615610ca55761109690611088614b01565b5050505050600435336154fa565b6001600d55005b34610532576000366003190112610532576105696110b96146ae565b9260409694969291925196879687613de6565b34610532576080366003190112610532576110e5613d5a565b60643567ffffffffffffffff811161053257366023820112156105325767ffffffffffffffff81600401351161053257366024826004013560051b830101116105325761113061460d565b611138614b01565b5050505050611145614dc8565b505015610c6a576001600160a01b038216600052601360205260ff604060002054161561170e578060040135156116f8576001600160a01b0361118a60248301615837565b817f00000000000000000000000000000000000000000000000000000000000000001691829116036116c357600482013560001981019081116116ad576111e16111dc82856004013560248701615827565b615837565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911603611644575061122133306024356155c3565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602480359082015290602090829060449082906000905af180156114e85761160b575b50604051906370a0823160e01b82523060048301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9182156114e8576000926115d7575b5060405180917f38ed173900000000000000000000000000000000000000000000000000000000825260a482016024356004840152604435602484015260a060448401528160040135905260c482019060248101906000905b806004013582106115a05750505090806000923060648301524260848301520381836001600160a01b0388165af180156114e8576114f4575b50604051906370a0823160e01b82523060048301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156114e8576000906114b4575b6113c092506142cf565b90604435821061147c576113d26142a9565b6113fc6113df8483615b18565b916113e985614454565b339130916113f686614454565b91615672565b6001600160a01b0360405192168252602435602083015282604083015260608201527fe947f0f9b6255bdcf76d13d1257d34fbe380e0d5d4daa75e61c783a41e1607ba60803392a261144c6143f7565b50601a549061145b8233615455565b15611470576020906001600d55604051908152f35b50610f28610f136142a9565b604482604051907f76baadda000000000000000000000000000000000000000000000000000000008252823560048301526024820152fd5b506020823d6020116114e0575b816114ce60209383614261565b81010312610532576113c091516113b6565b3d91506114c1565b6040513d6000823e3d90fd5b3d806000833e6115048183614261565b8101906020818303126105325780519067ffffffffffffffff8211610532570181601f820112156105325780519067ffffffffffffffff821161158a576020808360051b936040519061155983870183614261565b8152019282010192831161053257602001905b82821061157a575050611361565b815181526020918201910161156c565b634e487b7160e01b600052604160045260246000fd5b919350918335906001600160a01b038216820361053257602080916001600160a01b03600194168152019401920184939291611328565b9091506020813d602011611603575b816115f360209383614261565b81010312610532575190836112cf565b3d91506115e6565b6020813d60201161163c575b8161162460209383614261565b810103126105325761163590614dbb565b5082611279565b3d9150611617565b61165d6111dc610bbf9285602481600401359101615827565b60405163b0b3262d60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116600483015290911660248201529081906044820190565b634e487b7160e01b600052601160045260246000fd5b6116cf60248301615837565b60405163b0b3262d60e01b81526001600160a01b03928316600482015291166024820152604490fd5b634e487b7160e01b600052603260045260246000fd5b60046040517f1311dc6d000000000000000000000000000000000000000000000000000000008152fd5b346105325760003660031901126105325760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461053257602036600319011261053257611795613d5a565b5060206107806117a36146ae565b5093505050506001600160801b0381511660065490818110156000146117cd575050600090615b18565b6117d6916142cf565b90615b18565b3461053257600036600319011261053257602060075460ff60405191831c1615158152f35b34610532576020366003190112610532577f854df3eb95564502c8bc871ebdd15310ee26270f955f6c6bd8cea68e75045bc06020600435611840614572565b80600655604051908152a1005b3461053257600036600319011261053257602060ff60075460181c166040519015158152f35b346105325761188136613e8f565b919061188b61460d565b6001600160a01b03811615610ca55760ff60075460101c166118f3576020926118e6916118b6614b01565b50505050506118c3614283565b6118cd8582615bb2565b946118e06118da87614454565b91614454565b9161516a565b6001600d55604051908152f35b60046040517fe0a39803000000000000000000000000000000000000000000000000000000008152fd5b3461053257600036600319011261053257602060ff602254166040519015158152f35b34610532576020366003190112610532576001600160a01b03611961613d5a565b166000526008602052604060002054601f60205260406000205490601e602052610569604060002054604051938493846040919493926060820195825260208201520152565b34610532576020366003190112610532576001600160a01b036119c8613d5a565b16600052601e6020526020604060002054604051908152f35b34610532576119ef36613e8f565b91906119f961460d565b6001600160a01b03811615610ca55760ff60075460101c166118f3576020926118e691611a24614b01565b5050505050611a31614283565b611a44611a3e8683615aae565b95614454565b6118e086614454565b613b64565b3461053257604036600319011261053257611a78611a6e613d5a565b6024359033613f3f565b602060405160018152f35b3461053257604036600319011261053257611a9c613d5a565b6024359033600052600960205260406000206001600160a01b03821660005260205260406000205491808310611ad857611a78920390336140f5565b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b3461053257600036600319011261053257610100604051620186a0808252806020830152806040830152806060830152670de0b6b3a76400009081608084015260a083015260c082015261c35060e0820152f35b3461053257600036600319011261053257611baf6146ae565b509350505050602081016001600160801b03918282511615600014611be4575050506020670de0b6b3a7640000604051908152f35b51670de0b6b3a7640000908316818102918204036116ad57602092611c0b92511690614771565b610780565b3461053257600036600319011261053257604051600090601554600181811c90808316928315611d07575b6020938484108114611cf157838652908115611cd15750600114611c76575b61056984611c6a81880382614261565b60405191829182613d11565b601560009081529294507f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4755b828410611cbe575050508161056993611c6a9282010193611c5a565b8054858501870152928501928101611ca2565b60ff1916858501525050151560051b8201019150611c6a81610569611c5a565b634e487b7160e01b600052602260045260246000fd5b91607f1691611c3b565b346105325760003660031901126105325760a060165463ffffffff9067ffffffffffffffff6040519280831684528260201c166020840152808260401c1660408401528160801c16606083015260c01c6080820152f35b3461053257604036600319011261053257600435611d84613d70565b611d8c61460d565b6001600160a01b03811615610ca557611da3614b01565b5050505050611db0614283565b91611dbb8184615bb2565b91600654611dd3846001600160801b03875116613f32565b11611df1576020936118e692611deb6118da86614454565b9161506a565b60046040517f2ab4a214000000000000000000000000000000000000000000000000000000008152fd5b34610532576020611e2b36613dba565b15611e475761078091611e3c6146ae565b945050505050615b45565b611c0b91611e536142a9565b615b45565b3461053257604036600319011261053257611e71613d5a565b63ffffffff6024358181169291838203610532576080937f78ba1c32ac8ea4b3d51133dd0b6f5d8f98e23797aade6afc381ea317d5d4f28b85611f0893611eb661584b565b611ebe6143f7565b966001600160a01b0390818951169260208a015116604051938452602084015216938460408301526060820152a16001600160a01b03166001600160a01b03196017541617601755565b7fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff00000000000000000000000000000000000000006017549260a01b1691161760175576ffffffffffffffffffffffffffffffffffffffffffffff6040820151167fffffffffffffffffff0000000000000000000000000000000000000000000000601854161760185560608101516019550151601a55600080f35b346105325760003660031901126105325760206001600160a01b0360025416604051908152f35b34610532576020366003190112610532576001600160a01b03611ff1613d5a565b166000526013602052602060ff604060002054166040519015158152f35b34610532576020366003190112610532577fdea8bb46eee4300a7d2de86939c245f568dc5994576194cbfb69969e010dcb67602061204b613d9c565b8015612090576120596144d2565b612061614b01565b5050505050151560075466ff0000000000001966ff0000000000008360301b16911617600755604051908152a1005b612098614572565b612059565b34610532576000366003190112610532576120b66144d2565b60006005557fdea8bb46eee4300a7d2de86939c245f568dc5994576194cbfb69969e010dcb67604051600081527fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f638660208092a160006006557f854df3eb95564502c8bc871ebdd15310ee26270f955f6c6bd8cea68e75045bc08160405160008152a16007805460ff8160081c1615612218575b50805460ff8160181c16156121da575b50805460ff8160281c1615612198575b50612172614b01565b5050505050660100000000000066ff0000000000001982541617905560405160018152a1005b6401000000009064ff0000000019161781557f28bc4f9e24da61e7ba3aa697dfaefd0167093d2425c00b6190a7d3152ee6dfaa8260405160018152a183612169565b620100009062ff000019161781557fc56dd3e14f5af3a74c61b7cdf855a3d8ab4401c78c0622a4d312de8a8f8736a28260405160018152a183612159565b60019060ff19161781557f34a71a12fa81891b738d910d4d44ffabeeb12f8bc026844db237ea8bf8ebe8be8260405160018152a183612149565b34610532576020366003190112610532577f4cb8c9e37efb94c6cdbd2a80fe36cee1957b5584d1a1986fa2bae115180af59a61228c613d5a565b61229461584b565b600480546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915290a1005b3461053257600036600319011261053257601c54604080516001600160801b038316815260809290921c602083015290f35b346105325760203660031901126105325760043563ffffffff8116908181036105325761232661584b565b60ff60075460301c166123d85761c35082116123ae577f58a58c712558f3d6e20bed57421eb8f73048d881dea9e5bb80efb37c49680d1c91602091612369614b01565b50505050507fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff67ffffffff0000000060165492851b16911617601655604051908152a1005b60046040517fda0afa57000000000000000000000000000000000000000000000000000000008152fd5b60046040517fa02a2bcd000000000000000000000000000000000000000000000000000000008152fd5b346105325760003660031901126105325761241b61584b565b6501000000000065ff00000000001960075416176007557f60c2acdf5b421891c8cc7302420292f2680f0e835fc76dd15f35a7bb0dd5cbc8600080a1005b3461053257602061246936613dba565b15612485576107809161247a6146ae565b945050505050615c1e565b611c0b916124916142a9565b615c1e565b346105325760206124a636613dba565b156124c257610780916124b76146ae565b509350505050615c1e565b611c0b91612491614283565b34610532576000366003190112610532576003546001600160a01b033381831603612538576001600160a01b03198092166003556002549133908316176002553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b608460405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152fd5b34610532576060366003190112610532576125bb613ec4565b602435906125c7613d86565b6125cf61460d565b6001600160a01b038116928315610ca55760ff60075460201c166128e3578042116128ac57506125fd614b01565b505050505061260a614dc8565b5090506126178183615455565b612882576126236142a9565b9184600052601e60205260406000205492601f602052612647604060002054614454565b926000936001600160801b0396670de0b6b3a76400006126738983169461266e8688615bb2565b61475e565b0498600f5497620186a0988901808a116116ad576126928a918d61475e565b046126a561269f83615793565b91615793565b90600082820392128183128116918313901516176116ad57600012801591906128625760209b505b809960115480612820575b50505086959293612781979486938b6118e69c9d612767958d61270661270161276f9d8c615be3565b614454565b98600097600093612789575b509160c093917f821de4e13fff1938b3806eb2859b6a5d55111f00dcf286f8a793584228ff36f895936040519485526020850152828b166040850152606084015281881660808401521660a0820152a26147a6565b903392615672565b61277a8133876155c3565b30836155c3565b3090306154fa565b7f821de4e13fff1938b3806eb2859b6a5d55111f00dcf286f8a793584228ff36f89593919850916127bd8860c096946145c9565b98838d818c16806127d7575b505050919395509193612712565b829550906127eb6127016127f59383615bb2565b95869151166145c9565b168d52601b546001600160801b031985612811868285166145c9565b16911617601b55838d386127c9565b6118e69b50829a50936127679361284f8b9a97936128476127819d9a9661276f9c9961475e565b04809d6142cf565b9c509350939682965081959899506126d8565b506010548901808a116116ad5761287c8a9160209d61475e565b046126cd565b60046040517f75e595fa000000000000000000000000000000000000000000000000000000008152fd5b604490604051907f5ba2a8d50000000000000000000000000000000000000000000000000000000082524260048301526024820152fd5b60046040517f6d2c35dc000000000000000000000000000000000000000000000000000000008152fd5b3461053257600036600319011261053257612926613eda565b60006001600160a01b036001600160a01b03198060035416600355600254908116600255167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610532576020366003190112610532576001600160a01b03612992613d5a565b1660005260086020526020604060002054604051908152f35b34610532576040366003190112610532576004356129c7613d70565b906129d061460d565b6001600160a01b03821615610ca5576129e7614b01565b50505050506129f4614283565b600654612a0b836001600160801b03845116613f32565b11611df15760209281612a2a612a24856118e695615b18565b94614454565b611deb85614454565b3461053257602036600319011261053257612a4c613d5a565b612a5461584b565b601254604080516001600160a01b038084168252848116602083015292936001600160a01b0319939290917faeae842c8b3cd009fbb602e1ed072dc1aec69750e431ceae97f7543b466cd04c9190a116911617601255600080f35b3461053257600036600319011261053257612ac86144d2565b60006006557f854df3eb95564502c8bc871ebdd15310ee26270f955f6c6bd8cea68e75045bc0602060405160008152a1005b3461053257600036600319011261053257602060ff60075460101c166040519015158152f35b612b2936613e8f565b9190612b3361460d565b33600052602160205260ff6040600020541615612c51576001600160a01b0380821615610ca5578316918215612c27578390612b6d614b01565b505050505083600052601f602052604060002054612c0f575b91612b90926155c3565b612b986143f7565b50612ba6601a548093615455565b15612bb2576001600d55005b612bd2612bbd6142a9565b82600052601f60205260406000205490615be3565b90600052601e602052610bbf60406000205492604051938493633b49de0f60e21b8552600485016040919493926060820195825260208201520152565b9050612c19614dc8565b505015610c6a578390612b86565b60046040517f6f5f81d7000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb9f0f171000000000000000000000000000000000000000000000000000000008152fd5b34610532576000366003190112610532576060604051600381526000602082015260006040820152f35b34610532576020366003190112610532576001600160a01b03612cc6613d5a565b16600052601f6020526020604060002054604051908152f35b3461053257600036600319011261053257612cf861584b565b612d00615889565b6001600160a01b0319806000541660005560015460006001600160a01b03821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a316600155005b34610532576020366003190112610532576001600160a01b03612d91613d5a565b166000526021602052602060ff604060002054166040519015158152f35b3461053257600036600319011261053257612dc861584b565b61010061ff001960075416176007557f269ac55859865c2ff127a862e95c81ce7e3b9b13582036d3df419df5c07ec8b4600080a1005b3461053257602036600319011261053257612e17613d9c565b8015612e7c57612e256144d2565b6007549060ff8260281c16610848577f28bc4f9e24da61e7ba3aa697dfaefd0167093d2425c00b6190a7d3152ee6dfaa9160209115159064ff0000000082841b169064ff00000000191617600755604051908152a1005b612e84614572565b612e25565b346105325760003660031901126105325760206001600160a01b0360015416604051908152f35b3461053257602036600319011261053257612ec9613d9c565b8015612f2457612ed76144d2565b6007549060ff8260081c16610848577f34a71a12fa81891b738d910d4d44ffabeeb12f8bc026844db237ea8bf8ebe8be9160209115159060ff82169060ff191617600755604051908152a1005b612f2c614572565b612ed7565b34610532576000366003190112610532576020601d54604051908152f35b346105325760003660031901126105325760206001600160a01b0360045416604051908152f35b34610532576000366003190112610532576020601054604051908152f35b3461053257602036600319011261053257612fad613d5a565b612fb561584b565b6001600160a01b0380911690816001600160a01b03196000541617600055600154167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a600080a3005b3461053257602036600319011261053257613017613d5a565b506001600160801b036130286146ae565b50935050505051166006548082101560001461304c57505060206000604051908152f35b602091611c0b916142cf565b3461053257600036600319011261053257613071614572565b7fdea8bb46eee4300a7d2de86939c245f568dc5994576194cbfb69969e010dcb677fbf1ce7fb3a8e648b70ea830f99b52f7ea31554186d29763280751f42e77f63867f854df3eb95564502c8bc871ebdd15310ee26270f955f6c6bd8cea68e75045bc06000198060055560405190808252602093848093a180600655604051908152a16007805460ff8160081c16156131bd575b50805460ff8160181c1615613185575b50805460ff8160281c161561314b575b5061312e614b01565b505050505066ff00000000000019815416905560405160008152a1005b64ff00000000191681557f28bc4f9e24da61e7ba3aa697dfaefd0167093d2425c00b6190a7d3152ee6dfaa8260405160008152a183613125565b62ff0000191681557fc56dd3e14f5af3a74c61b7cdf855a3d8ab4401c78c0622a4d312de8a8f8736a28260405160008152a183613115565b60ff191681557f34a71a12fa81891b738d910d4d44ffabeeb12f8bc026844db237ea8bf8ebe8be8260405160008152a183613105565b34610532576040366003190112610532577fea1eefb4fd58778d7b274fe54045a9feeec8f2847899c2e71126d3a74d486da5604061322f613d5a565b6001600160a01b0361323f613dab565b91613248613eda565b169081600052601360205261326c81846000209060ff801983541691151516179055565b825191825215156020820152a1005b3461053257604036600319011261053257613294613d5a565b61329c613d70565b906001600160a01b0380911660005260208052604060002091166000526020526020604060002054604051908152f35b34610532576040366003190112610532576004356132e8613d70565b906132f161460d565b6001600160a01b03821615610ca55760ff6007541661333c576118e6602092613318614b01565b50505050506133256142a9565b61332f8482615be3565b936127676118da86614454565b60046040517f3cc383d2000000000000000000000000000000000000000000000000000000008152fd5b3461053257604036600319011261053257611a78613382613d5a565b33600052600960205260406000206001600160a01b0382166000526020526133b1602435604060002054613f32565b90336140f5565b34610532576000366003190112610532576133d161584b565b600160ff1960225416176022557f0af6d9d6ea0e3f0cdb71562ce1fce30aa597445ea04f5b25a939cfe0a252171c600080a1005b346105325760003660031901126105325760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461053257600036600319011261053257602060ff60075460281c166040519015158152f35b3461053257600036600319011261053257602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610532576040366003190112610532576004356134c9613d70565b906134d261460d565b6001600160a01b03821691821580156137c3575b613799576134f2614b01565b5050505050600554916001600160801b03926135128285601c5416613f32565b11610c7b5761351f614dc8565b505015610c6a5761352f90614454565b926135386142a9565b928061354681610a4d614283565b16948181169586811061376e575082908160005260209687805260406000203360005288528783826040600020549061357e916142cf565b8160005282805260406000203360005283528060406000205560405190815233927f399f462d2df28f9d69d52cdcfd7e6ef0598b231d0b9baa75ae424e43195ffe8191a36135cc8188615aae565b968480848a97845116906135df916147a6565b168252808a83019281881682855116906135f8916147a6565b9382851690525116613620906001600160801b03166001600160801b0319601c541617601c55565b601c549160801b6001600160801b031916911617601c5582600052601f885260406000208481549061365191613f32565b905560405163a9059cbb60e01b8982015233602482015260448082019290925290815261367f606482614261565b6136a9907f00000000000000000000000000000000000000000000000000000000000000006158c7565b604080516001600160801b03929092168252602082019390935233927f01348584ec81ac7acd52b7d66d9ade986dd909f3d513881c190fc31c90527efe91a36136f06143f7565b50601a5491826136ff91615455565b156137135750506001600d55604051908152f35b601e846137356137216142a9565b84600052601f835260406000205490615be3565b9260005252610bbf60406000205492604051938493633b49de0f60e21b8552600485016040919493926060820195825260208201520152565b6040516362ddb6d760e11b815260048101919091526001600160801b03919091166024820152604490fd5b60046040517f1aa699c6000000000000000000000000000000000000000000000000000000008152fd5b508233146134e6565b34610532576060366003190112610532576137e5613d5a565b6137ed613d70565b604435906001600160a01b038316600052600960205260406000203360005260205260406000205492600019840361382a575b611a789350613f3f565b8284106138465761384183611a78950333836140f5565b613820565b606460405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b34610532576020366003190112610532576138a3613d9c565b6138ab6145e2565b506040516138b881614229565b6000815260006020820152610569604051916138d383614229565b60008352600060208401526138e661460d565b916138ef614b01565b92969350909661390b575b6001600d5560405196879687613de6565b92509050613917614283565b906139206142a9565b926138fa565b3461053257602061393636613dba565b1561395257610780916139476146ae565b509350505050615b45565b611c0b91611e53614283565b346105325760603660031901126105325760443560243560043561398061584b565b7fc9aa62b60be8f25ac9f285edbb80bde64199b3c53e1da1027058551d32695fca60c0600f5460105460115490604051928352602083015260408201528360608201528460808201528560a0820152a1600f55601055601155005b34610532576000366003190112610532576020601b5460801c604051908152f35b34610532576000366003190112610532576020600f54604051908152f35b3461053257600036600319011261053257602060ff600754166040519015158152f35b3461053257600036600319011261053257602060ff60075460081c166040519015158152f35b34610532576020366003190112610532576020610780613a816146ae565b50935050505060043590615aae565b3461053257604036600319011261053257611a78613aac613d5a565b60243590336140f5565b346105325760003660031901126105325760206001600160a01b0360005416604051908152f35b3461053257602036600319011261053257600435613af961584b565b60ff60225416613b3a577fe796e9ae748449310fcd1cc6718aab236c9b8d2e0e04dacb232ba564d5b338cc6040600e548151908152836020820152a1600e55005b60046040517f8c34a9b8000000000000000000000000000000000000000000000000000000008152fd5b34610532576020366003190112610532576020610780613b826146ae565b50935050505060043590615bb2565b3461053257600036600319011261053257604051600090601454600181811c90808316928315613c45575b6020938484108114611cf157838652908115611cd15750600114613bea5761056984611c6a81880382614261565b601460009081529294507fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec5b828410613c32575050508161056993611c6a9282010193611c5a565b8054858501870152928501928101613c16565b91607f1691613bbc565b3461053257600036600319011261053257613c6861584b565b630100000063ff0000001960075416176007557fb949af551d0c88280e648f9205b986bb5f1d899c425498238655ee37617c0c39600080a1005b3461053257600036600319011261053257613cbb61460d565b6060613cc5614dc8565b906001600d55604051921515835260208301526040820152f35b346105325760003660031901126105325760206001600160801b03613d026146ae565b50516040519516855250505050f35b6020808252825181830181905290939260005b828110613d4657505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501613d24565b600435906001600160a01b038216820361053257565b602435906001600160a01b038216820361053257565b604435906001600160a01b038216820361053257565b60043590811515820361053257565b60243590811515820361053257565b606090600319011261053257600435906024358015158103610532579060443580151581036105325790565b9194613e709197969461014094613e8d9761018086019a86526020860152604085015263ffffffff8082511660608601526020820151166080850152608060408201519167ffffffffffffffff80931660a08701528260608201511660c087015201511660e0840152610100830190602090816001600160801b0391828151168552015116910152565b0190602090816001600160801b0391828151168552015116910152565b565b606090600319011261053257600435906001600160a01b03906024358281168103610532579160443590811681036105325790565b600435906001600160801b038216820361053257565b6001600160a01b03600254163303613eee57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b919082018092116116ad57565b6001600160a01b0380911691821561408b57169182156140215760008281526008602052604081205491808310613fb757604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95876020965260088652038282205586815220818154019055604051908152a3565b608460405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038091169182156141c057169182156141565760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260098252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761158a57604052565b60a0810190811067ffffffffffffffff82111761158a57604052565b90601f8019910116810190811067ffffffffffffffff82111761158a57604052565b6040519061429082614229565b601b546001600160801b038116835260801c6020830152565b604051906142b682614229565b601c546001600160801b038116835260801c6020830152565b919082039182116116ad57565b60ff60075460101c166143725761434d6001600160a01b036142fc6146ae565b95935096919350501690600030831460001461435e575061432a916000526008602052604060002054613f32565b905b6143466001600160801b03918280875116915116906145c9565b1692615bb2565b80821015614359575090565b905090565b90506040918152600860205220549061432c565b50600090565b60ff60075460101c16614372576143c06001600160a01b036143986146ae565b929694509250506143b96001600160801b03918280855116915116906145c9565b1690615b18565b92169060003083036143e4575061434d916000526008602052604060002054613f32565b905060409181526008602052205461434d565b6040519061440482614245565b6017546001600160a01b038116835260a01c63ffffffff16602083015260185476ffffffffffffffffffffffffffffffffffffffffffffff1660408301526019546060830152601a546080830152565b6001600160801b0390818111614468571690565b608460405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b0380600454163314159081614562575b81614535575b81614526575b506144fc57565b60046040517f1d1e647b000000000000000000000000000000000000000000000000000000008152fd5b905060015416331415386144f5565b337f00000000000000000000000000000000000000000000000000000000000000008216141591506144ef565b80915060025416331415906144e9565b6001600160a01b03806002541633141590816145ba575b5061459057565b60046040517f6f545269000000000000000000000000000000000000000000000000000000008152fd5b90506001541633141538614589565b6001600160801b0391821690821603919082116116ad57565b604051906145ef82614245565b60006080838281528260208201528260408201528260608201520152565b6002600d541461461e576002600d55565b606460405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b6040519061466f82614245565b81608060165463ffffffff80821684528160201c16602084015267ffffffffffffffff808260401c16604085015281831c16606084015260c01c910152565b600090819081806146bd6145e2565b508060206040516146cd81614229565b828152015260206040516146e081614229565b82815201526146ed614662565b936146f7856147c1565b8051909490156147435750505060608201519260808301519260a08101519267ffffffffffffffff806020840151166060850152604083015116608084015260e060c083015192015190565b92909350614752949194614283565b9061475b6142a9565b90565b818102929181159184041417156116ad57565b811561477b570490565b634e487b7160e01b600052601260045260246000fd5b519067ffffffffffffffff8216820361053257565b9190916001600160801b03808094169116019182116116ad57565b60408051929167ffffffffffffffff919061010085018381118682101761158a57825260009182865260208087019284845282880190858252606089019386855260808a019587875260a08b0198888a5260c08c0194835161482281614229565b8a81528a88820152865260e08d0193805161483c81614229565b8b81528b8982015285528d818701908482511642141580614af1575b61486d575b5050505050505050505050505050565b61489291600186925261487e614283565b8a526148886142a9565b88525116426142cf565b916001600160801b039b8c8951511615600014614ab457805b836001600160a01b03601254169160648860808d01511691835194859384927fcd3181d50000000000000000000000000000000000000000000000000000000084528b6004850152602484015260448301525afa918215614aa95780948193614a44575b5050509284809361493a9361494397670de0b6b3a764000099971690521684528c875151169061475e565b9151169061475e565b04808652878115159182614a2a575b505080614a11575b61496a575b80808080808061485d565b63ffffffff9184918861498681895116925192828451166147a6565b169052878651168861499d865192828451166147a6565b16905201511692836149b0575b8061495f565b614a02946149ec6149de620186a06149cd8a986149f2965161475e565b04808452878787510151169061475e565b9186855151169051906142cf565b90614771565b80965251019316828451166147a6565b169052388080808080806149aa565b5086614a238651828651511690613f32565b111561495a565b81614a3b9293508451511690613f32565b11158738614952565b919450915083813d8111614aa2575b614a5d8183614261565b81010312614a9f5750670de0b6b3a76400009492848361493a9382614a908e614a896149439b99614791565b9401614791565b9497995050938195975061490f565b80fd5b503d614a53565b8451903d90823e3d90fd5b8c87515116620186a09080820291820403614add57614ad8908e8b51511690614771565b6148ab565b602482634e487b7160e01b81526011600452fd5b5060ff60075460301c1615614858565b600090600090600090600090614b156145e2565b50614b1e614662565b90614b28826147c1565b8051151580614b35575050565b935095509250925092606081015192608092838301519360a084015193606084019067ffffffffffffffff80835116928487018281511692602095868601828151169189604097888a019486865116918a519485528c8501528984015260608301527fc63977c8e2362a31182dc8e89a52252f9836922738e0abcfc0de6924972eafe591a18d838251168751918252898201528d87820152898d60608301527f2b5229f33f1d24d5baab718e1e25d0d86195a9b6d786c2c0868edfb21a460e2591a151938285169052519181831690524216838901524363ffffffff1680895285890151861b67ffffffff00000000169160c01b7fffffffffffffffff000000000000000000000000000000000000000000000000169342901b6fffffffffffffffff00000000000000001691171790851b77ffffffffffffffff0000000000000000000000000000000016171760165560c081015191806001600160801b039384815116614cba906001600160801b03166001600160801b0319601b541617601b55565b015191601b54846001600160801b03198095881b16911617601b5560e0015183815116614cfd906001600160801b03166001600160801b0319601c541617601c55565b0151601c54931b16911617601c5582614d1257565b613e8d83305b6001600160a01b0316908115614d77577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082614d5a600094600a54613f32565b600a558484526008825260408420818154019055604051908152a3565b606460405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b5190811515820361053257565b600090600090614dd66143f7565b906040918281019376ffffffffffffffffffffffffffffffffffffffffffffff93848651164214156000146150555760046001600160a01b03966060888651168451938480927fbd9a548b0000000000000000000000000000000000000000000000000000000082525afa90811561504857849885938693614fd1575b5090614eb683927fc1f41e029acf5127d111625602160c4cee3e1a4d38e691e50544d1f7c68b77be9695949a859c614f9f575b42168093528460608a01528360808a01528851166001600160a01b03166001600160a01b03196017541617601755565b60208701517fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff00000000000000000000000000000000000000006017549260a01b169116176017557fffffffffffffffffff000000000000000000000000000000000000000000000060185416176018558160195580601a5582519182526020820152a15b60808201614f5481516060850151906142cf565b91620186a09280840293840403614f8b5750614f7963ffffffff926020925190614771565b920151161015614f8557565b60019350565b80634e487b7160e01b602492526011600452fd5b7ffc131c36b7e444dacda44901fd43641dcdcfdc43fe9e2601b3c1dd87061db9e56020838c51168951908152a1614e86565b9950915091506060883d8211615040575b81614fef60609383614261565b8101031261503c57907fc1f41e029acf5127d111625602160c4cee3e1a4d38e691e50544d1f7c68b77be929161502489614dbb565b60208a01519984015190999394509190614eb6614e53565b8380fd5b3d9150614fe2565b50505051903d90823e3d90fd5b50606082015160808301519095509350614f40565b7fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79192936151426001600160a01b03926001600160801b0390816150b188828451166147a6565b1681526150f8826020830192816150cb8c828751166147a6565b1684526150da828c1688614d18565b51166001600160801b03166001600160801b0319601b541617601b55565b51816001600160801b0319601b549260801b16911617601b55604051906323b872dd60e01b60208301523360248301523060448301528616606482015260648152610c0281614245565b604080516001600160801b03958616815295909416602086015216923392819081015b0390a3565b9091926151a76001600160a01b039283871696873303615403575b5061518e6142a9565b6001600160801b039283918280855116915116906145c9565b1691808616928381106153da5750806151c387828551166145c9565b16825260209161520282848301926151de8b838651166145c9565b93828516905251166001600160801b03166001600160801b0319601b541617601b55565b816001600160801b0319601b549260801b16911617601b558616918715615370578760005260088252604092836000205481811061530757610c0284610bf47ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db9998979560008e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6153029a896152de9a63a9059cbb60e01b9a85875260088452038c86205580600a5403600a558b51908152a386519485938401528860248401602090939291936001600160a01b0360408201951681520152565b516001600160801b0395861681529590941660208601521692339281906040820190565b0390a4565b60848486519062461bcd60e51b82526004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b6084826040519062461bcd60e51b82526004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b6040516362ddb6d760e11b815260048101919091526001600160801b0387166024820152604490fd5b87600052600960205260406000203360005260205260406000205490600019820361542f575b50615185565b61544661544e926001600160801b038a16906142cf565b9033906140f5565b3880615429565b90600e549182156154f2576001600160a01b036154706142a9565b91169161548c600092848452601f602052604084205490615be3565b9283156154e8578252601e60205260408220549283156154e057670de0b6b3a7640000916154b99161475e565b0490620186a091828102928184041490151715614f8b5750906154db91614771565b111590565b505091505090565b5050505050600190565b505050600190565b9160207fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f916001600160a01b038091169485600052601e83526040600020615543868254613f32565b905561555185601d54613f32565b601d551692308403615567575b604051908152a3565b6155be6040516323b872dd60e01b848201528560248201523060448201528260648201526064815261559881614245565b7f00000000000000000000000000000000000000000000000000000000000000006158c7565b61555e565b6001600160a01b038093169283600052601e60205260406000206155e88382546142cf565b90556155f682601d546142cf565b601d5582169181308403615635575b50506040519081527fbc290bb45104f73cf92115c9603987c3f8fd30c182a13603d8cffa49b5f5995260203392a4565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482015261566b906155988160648101610bf4565b3881615605565b93907f9dc1449a0ff0c152e18e8289d865b47acc6e1b76b1ecb239c13d6ee22a9206a792916001600160801b0394856156ae84828a51166145c9565b16875260208701866156c386828451166145c9565b168152615711876001600160a01b03809516998a600052601f60205260406000206156f1838a1682546142cf565b905551166001600160801b03166001600160801b0319601c541617601c55565b51866001600160801b0319601c549260801b16911617601c551693308503615758575b50604080516001600160801b03928316815292909116602083015281908101615165565b61578d90604051906323b872dd60e01b60208301528660248301523060448301528316606482015260648152610c0281614245565b38615734565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116157bd5790565b608460405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152fd5b91908110156116f85760051b0190565b356001600160a01b03811681036105325790565b6001600160a01b0360015416330361585f57565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b6001600160a01b0360005416330361589d57565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b6001600160a01b0316906040516158dd81614229565b6020928382527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564848301526000808486829651910182855af13d15615a14573d9167ffffffffffffffff8311615a0057906159589392916040519261594b88601f19601f8401160185614261565b83523d868885013e615a1e565b908151908382159283156159de575b5050509050156159745750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b848092939450010312614a9f5750816159f79101614dbb565b80388381615967565b602485634e487b7160e01b81526041600452fd5b9061595892916060915b91929015615a7f5750815115615a32575090565b3b15615a3b5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015615a925750805190602001fd5b610bbf9060405191829162461bcd60e51b835260048301613d11565b91906001600160801b038084511615600014615ac957509150565b615b02906020850190615af981615af0615ae6828651168861475e565b828a511690614771565b9751168761475e565b91511690614771565b10615b0957565b90600181018091116116ad5790565b6001600160801b038082511615600014615b3157505090565b615af961475b93826020850151169061475e565b90916001600160801b038083511615600014615b615750505090565b602083959492930190615b84615b7a828451168561475e565b8288511690614771565b9584615b95575b50505050615b0957565b615ba893945081615af99151168761475e565b1038808080615b8b565b60208101906001600160801b03908183511615600014615bd25750505090565b61475b9382615af99251169061475e565b919060208301926001600160801b038085511615600014615c05575090925050565b9081615af981615af0615ae6615b02968651168861475e565b909160208201916001600160801b038084511615600014615c40575050505090565b615b84615b7a8284989795969851168561475e56fea2646970667358221220b44a4cf0cc82bfb10e16be54cef4171545ce0dd9f626c3aeb5374de818ad0bb964736f6c6343000815003355f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475c1f41e029acf5127d111625602160c4cee3e1a4d38e691e50544d1f7c68b77be000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018084fba666a33d37592fa2633fd49a74dd93a88000000000000000000000000657e8c867d8b37dcc18fa4caead9c45eb088c64200000000000000000000000074f27507abe7a10395c2b2e4dc019c4a62418f3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce05d591020716c58425e81b0dbe2912bced30ca00000000000000000000000000000000000000000000000000000000e2a835d90000000000000000000000000000000000000000000000000000000000015f900000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000002532c3d363306fa6d625e4cbad996bcf534e81540000000000000000000000002532c3d363306fa6d625e4cbad996bcf534e81540000000000000000000000002532c3d363306fa6d625e4cbad996bcf534e81540000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003053747572647920496e7465726573742042656172696e672074425443202865746865722e66692042544329202d20323200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e66744254432865425443292d3232000000000000000000000000000000000000