0 txs
54 calls
constructor
constructor()
functions
BPS
viewfunction BPS() view returns (uint256)
devFeesBps
viewfunction devFeesBps() view returns (uint256)
feeder
viewfunction feeder() view returns (address)
gasService
viewfunction gasService() view returns (address)
gmxV2ExchangeRouter
viewfunction gmxV2ExchangeRouter() view returns (address)
gmxV2WithdrawalVault
viewfunction gmxV2WithdrawalVault() view returns (address)
hlpStakingBps
viewfunction hlpStakingBps() view returns (uint256)
hlpStakingProtocolRevenueRewarder
viewfunction hlpStakingProtocolRevenueRewarder() view returns (address)
hmxStakingProtocolRevenueRewarder
viewfunction hmxStakingProtocolRevenueRewarder() view returns (address)
merkleAirdrop
viewfunction merkleAirdrop() view returns (address)
owner
viewfunction owner() view returns (address)
poolBasedRevenueAmount
viewfunction poolBasedRevenueAmount() view returns (uint256)
poolRouter
viewfunction poolRouter() view returns (address)
protocolOwnedLiquidityBps
viewfunction protocolOwnedLiquidityBps() view returns (uint256)
protocolOwnedLiquidityTreasury
viewfunction protocolOwnedLiquidityTreasury() view returns (address)
referralRevenueMaxThreshold
viewfunction referralRevenueMaxThreshold() view returns (uint256)
rewardRouter
viewfunction rewardRouter() view returns (address)
rewardToken
viewfunction rewardToken() view returns (address)
sglp
viewfunction sglp() view returns (address)
switchCollateralRouter
viewfunction switchCollateralRouter() view returns (address)
tokenSwapPath
viewfunction tokenSwapPath(address token, uint256) view returns (address path)
treasury
viewfunction treasury() view returns (address)
uniswapV3SwapFeeBPSs
viewfunction uniswapV3SwapFeeBPSs(address, address) view returns (uint24)
vaultStorage
viewfunction vaultStorage() view returns (address)
weth
viewfunction weth() view returns (address)
claimAndSwap
nonpayablefunction claimAndSwap(address[] tokens)
createGmWithdrawalOrders
payablefunction createGmWithdrawalOrders(tuple[] _withdrawParams, uint256 _executionFee) payable returns (bytes32[] _gmxOrderKeys)
feedProtocolRevenue
nonpayablefunction feedProtocolRevenue(uint256 feedingExpiredAt, uint256 weekTimestamp, uint256 referralRevenueAmount, bytes32 merkleRoot)
initialize
nonpayablefunction initialize(address _rewardToken, address _vaultStorage, address _poolRouter, address _sglp, address _rewardRouter, address _hlpStakingProtocolRevenueRewarder, address _hmxStakingProtocolRevenueRewarder, uint256 _hlpStakingBps, address _merkleAirdrop, uint256 _referralRevenueMaxThreshold, address _switchCollateralRouter)
recoverToken
nonpayablefunction recoverToken(address _token, address _to, uint256 _amount)
renounceOwnership
nonpayablefunction renounceOwnership()
setDevFeesBps
nonpayablefunction setDevFeesBps(uint256 _devFeesBps)
setDistributionBpsParams
nonpayablefunction setDistributionBpsParams(uint256 _hlpStakingBps, uint256 _protocolOwnedLiquidityBps, address _protocolOwnedLiquidityTreasury)
setFeeder
nonpayablefunction setFeeder(address newFeeder)
setGasService
nonpayablefunction setGasService(address _gasService)
setGmConfigs
nonpayablefunction setGmConfigs(address _gmxV2ExchangeRouter, address _gmxV2WithdrawalVault, address _weth)
setParams
nonpayablefunction setParams(address _rewardToken, address _vaultStorage, address _poolRouter, address _sglp, address _rewardRouter, address _hlpStakingProtocolRevenueRewarder, address _hmxStakingProtocolRevenueRewarder, uint256 _hlpStakingBps, address _merkleAirdrop, address _switchCollateralRouter)
setReferralRevenueMaxThreshold
nonpayablefunction setReferralRevenueMaxThreshold(uint256 newReferralRevenueMaxThreshold)
setTokenSwapPath
nonpayablefunction setTokenSwapPath(address[] token, address[][] path)
setTreasury
nonpayablefunction setTreasury(address _treasury)
setUniFeeBps
nonpayablefunction setUniFeeBps(address[] rewardTokens, address[] swapTokens, uint24[] uniV3FeeBpses)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Initialized
event Initialized(uint8 version)
LogGMWithdrawalCreated
event LogGMWithdrawalCreated(bytes32 gmxOrderKey, (address market, uint256 amount, uint256 minLongTokenAmount, uint256 minShortTokenAmount, uint256 gasLimit, bool withdrawProtocolRevenue) withdrawParam)
LogProtocolFee
event LogProtocolFee(uint256 weekTimestamp, uint256 stakingAmount)
LogSetDevFeesBps
event LogSetDevFeesBps(uint256 _devFeesBps)
LogSetDistributionBpsParams
event LogSetDistributionBpsParams(uint256 hlpStakingBps, uint256 protocolOwnedLiquidityBps, address protocolOwnedLiquidityTreasury)
LogSetFeeder
event LogSetFeeder(address oldValue, address newValue)
LogSetGasService
event LogSetGasService(address _gasService)
LogSetGmConfigs
event LogSetGmConfigs(address _gmxV2ExchangeRouter, address _gmxV2WithdrawalVault, address _weth)
LogSetParams
event LogSetParams(address rewardToken, address vaultStorage, address poolRouter, address rewardRouter, address hlpStakingProtocolRevenueRewarder, address hmxStakingProtocolRevenueRewarder, uint256 plpStakingBps, address merkleAirdrop, address switchCollateralRouter)
LogSetReferralRevenueMaxThreshold
event LogSetReferralRevenueMaxThreshold(uint256 oldThreshold, uint256 newThreshold)
LogSetTokenSwapPath
event LogSetTokenSwapPath(address[] token, address[][] path)
LogSetTreasury
event LogSetTreasury(address _treasury)
LogSetUniFeeBps
event LogSetUniFeeBps(address[] rewardTokens, address[] swapTokens, uint24[] uniV3FeeBps)
LogSetUniV3SwapFee
event LogSetUniV3SwapFee(uint24 oldValue, uint24 newValue)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
RewardDistributor_BadDevFeesBps
error RewardDistributor_BadDevFeesBps()
RewardDistributor_BadParams
error RewardDistributor_BadParams()
RewardDistributor_BadReferralRevenueMaxThreshold
error RewardDistributor_BadReferralRevenueMaxThreshold()
RewardDistributor_InvalidArray
error RewardDistributor_InvalidArray()
RewardDistributor_InvalidSwapFee
error RewardDistributor_InvalidSwapFee()
RewardDistributor_NotFeeder
error RewardDistributor_NotFeeder()
RewardDistributor_ReferralRevenueExceedMaxThreshold
error RewardDistributor_ReferralRevenueExceedMaxThreshold()
RewardDistributor_UnevenTokenSwapPath
error RewardDistributor_UnevenTokenSwapPath()
Transfer_NativeFailed
error Transfer_NativeFailed(address _to, uint256 _value)
Transfer_ToAddressIsZero
error Transfer_ToAddressIsZero()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61314880620000f46000396000f3fe6080604052600436106101e05760003560e01c8062fe9ad4146101e5578063034dc21c1461021b578063036fcf581461023d57806304d745bb1461025d578063081a95111461027d578063249d39e9146102a157806329a4c377146102b757806329b3a080146102d75780633bdb2d36146102ed5780633fc8cef31461030d5780634099ccdb1461032d5780634b9e0ce51461034d5780634dcbd640146103635780635452b9ba146103835780635a3bb989146103a35780635ad47b39146103c357806361d027b3146103e35780636a22d8cc146104035780636e13343114610423578063715018a61461044357806372936743146104585780637c19a33f146104785780637e01c64a146104c95780638987d3af146104df5780638ca70ffc146104ff5780638da5cb5b1461051f578063a643703314610534578063a7229fd914610554578063a788a71614610574578063b68395b414610594578063bbc83c28146105b4578063c4147cac146105d4578063c801046a146105ea578063cb0322841461060a578063ce1a66d31461062a578063dfdd8b901461064a578063e37e21811461066a578063f0f442601461068a578063f1a262dd146106aa578063f2fde38b146106ca578063f7c618c1146106ea578063f8bbf4ac1461070a575b600080fd5b3480156101f157600080fd5b50606954610205906001600160a01b031681565b604051610212919061238d565b60405180910390f35b34801561022757600080fd5b5061023b6102363660046123a1565b61072a565b005b34801561024957600080fd5b50606654610205906001600160a01b031681565b34801561026957600080fd5b5061023b6102783660046123cf565b610795565b34801561028957600080fd5b5061029360765481565b604051908152602001610212565b3480156102ad57600080fd5b5061029361271081565b3480156102c357600080fd5b5061023b6102d23660046123f3565b610806565b3480156102e357600080fd5b5061029360705481565b3480156102f957600080fd5b50606f54610205906001600160a01b031681565b34801561031957600080fd5b50607554610205906001600160a01b031681565b34801561033957600080fd5b50607354610205906001600160a01b031681565b34801561035957600080fd5b50610293607b5481565b34801561036f57600080fd5b5061023b61037e3660046123a1565b6109be565b34801561038f57600080fd5b50606754610205906001600160a01b031681565b3480156103af57600080fd5b50606c54610205906001600160a01b031681565b3480156103cf57600080fd5b50606854610205906001600160a01b031681565b3480156103ef57600080fd5b50607854610205906001600160a01b031681565b34801561040f57600080fd5b50607954610205906001600160a01b031681565b34801561042f57600080fd5b5061020561043e3660046124c5565b610a25565b34801561044f57600080fd5b5061023b610a5d565b34801561046457600080fd5b5061023b61047336600461253c565b610a71565b34801561048457600080fd5b506104b56104933660046125a7565b606e60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff9091168152602001610212565b3480156104d557600080fd5b50610293606d5481565b3480156104eb57600080fd5b50607454610205906001600160a01b031681565b34801561050b57600080fd5b5061023b61051a3660046126bd565b610b77565b34801561052b57600080fd5b50610205610c22565b34801561054057600080fd5b50606b54610205906001600160a01b031681565b34801561056057600080fd5b5061023b61056f3660046126f1565b610c31565b34801561058057600080fd5b50606a54610205906001600160a01b031681565b3480156105a057600080fd5b5061023b6105af366004612732565b610c49565b3480156105c057600080fd5b50607754610205906001600160a01b031681565b3480156105e057600080fd5b50610293607a5481565b6105fd6105f836600461276b565b610cc1565b60405161021291906127e5565b34801561061657600080fd5b5061023b610625366004612829565b61108e565b34801561063657600080fd5b5061023b610645366004612918565b6111c3565b34801561065657600080fd5b5061023b6106653660046123cf565b6112fe565b34801561067657600080fd5b5061023b6106853660046129df565b611351565b34801561069657600080fd5b5061023b6106a53660046123cf565b61138e565b3480156106b657600080fd5b50607254610205906001600160a01b031681565b3480156106d657600080fd5b5061023b6106e53660046123cf565b6113e1565b3480156106f657600080fd5b50606554610205906001600160a01b031681565b34801561071657600080fd5b5061023b610725366004612a11565b61145a565b6107326114de565b611388811115610755576040516373b5de4360e01b815260040160405180910390fd5b7fb5be9dc8587e9a56e2604c9f1526e1003eb0367c06a76d90eaef96f602446d1160705482604051610788929190612a51565b60405180910390a1607055565b61079d6114de565b606a54604080516001600160a01b03928316815291831660208301527f847201f77e4b191964101633cd4efe51173db615855c06c2235217c84d47f612910160405180910390a1606a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16158080156108265750600054600160ff909116105b8061084757506108353061153d565b158015610847575060005460ff166001145b6108af5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156108d2576000805461ff0019166101001790555b6108da61154c565b606580546001600160a01b03199081166001600160a01b038f8116919091179092556069805482168e84161790556066805482168c84161790556067805482168d8416179055606c805482168b84161790556072805482168584161790556068805482168a8416179055606f80548216898416179055606d879055606b8054909116918616919091179055607083905580156109b0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b6109c66114de565b6127108111156109e9576040516319657ef560e21b815260040160405180910390fd5b607a8190556040518181527f0168e90d772e3b9e08586ee04c8e0448e9d08a29bad7602eb7056f992f00710d906020015b60405180910390a150565b60716020528160005260406000208181548110610a4157600080fd5b6000918252602090912001546001600160a01b03169150829050565b610a656114de565b610a6f600061157b565b565b610a796114de565b828114610a99576040516302de6f8560e01b815260040160405180910390fd5b7fa7400185b273ac09f13c66f272b7bea45ce1260e1191a67fa5ca86c91a642ef884848484604051610ace9493929190612aa8565b60405180910390a160005b60ff8116841115610b705782828260ff16818110610af957610af9612b5d565b9050602002810190610b0b9190612b73565b6071600088888660ff16818110610b2457610b24612b5d565b9050602002016020810190610b3991906123cf565b6001600160a01b031681526020810191909152604001600020610b5d929091612308565b5080610b6881612bd2565b915050610ad9565b5050505050565b606a546001600160a01b03163314610ba25760405163225a522560e01b815260040160405180910390fd5b610bab816115cd565b6065546040516370a0823160e01b81526001600160a01b03909116906370a0823190610bdb90309060040161238d565b602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c9190612bf1565b607b5550565b6033546001600160a01b031690565b610c396114de565b610c4483838361174d565b505050565b610c516114de565b606d8390556076829055607780546001600160a01b0319166001600160a01b0383169081179091556040805185815260208101859052908101919091527fb6c5da0bbeee248c3e83e871dcbb5b4d7dd2b05b5a7868203b479642fdcc124c906060015b60405180910390a1505050565b606a546060906001600160a01b03163314610cef5760405163225a522560e01b815260040160405180910390fd5b82806001600160401b03811115610d0857610d086125e0565b604051908082528060200260200182016040528015610d31578160200160208202803683370190505b509150610d786040518060c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6000805b8381101561108357878782818110610d9657610d96612b5d565b905060c00201803603810190610dac9190612c18565b92508260a0015115610dc3578251610dc390611770565b6074546020840151610e6a916001600160a01b03169015610de8578460200151610e58565b84516040516370a0823160e01b81526001600160a01b03909116906370a0823190610e1790309060040161238d565b602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190612bf1565b85516001600160a01b0316919061184b565b607560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b5050607454607554610ef194506001600160a01b0390811693501690508861184b565b60735460408051610160810182523081526000602080830182905282840182905287516001600160a01b0390811660608501528451838152808301865260808501528451838152918201909452929093169263ad23c5a19260a0830191508152602001866040015181526020018660600151815260200160001515815260200189815260200186608001518152506040518263ffffffff1660e01b8152600401610f9b9190612cd9565b6020604051808303816000875af1158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190612bf1565b915081858281518110610ff357610ff3612b5d565b6020908102919091018101919091526040805184815285516001600160a01b031681840152918501518282015284015160608083019190915284015160808083019190915284015160a080830191909152840151151560c08201527f573411de4e2a299f9ea8b84ef56e64c3b4cf5edb15ca5d5857706b3ad9e6b09a9060e00160405180910390a1600101610d7c565b505050509392505050565b6110966114de565b815183511415806110a957508051825114155b156110c757604051631194626b60e11b815260040160405180910390fd5b825160005b81811015611181578281815181106110e6576110e6612b5d565b6020026020010151606e600087848151811061110457611104612b5d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061114057611140612b5d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805462ffffff191662ffffff929092169190911790556001016110cc565b507f25f8aaeed278096e4231bbe911336fb5041d57676c5fb4fdc20417e4d4fb877b8484846040516111b593929190612dad565b60405180910390a150505050565b6111cb6114de565b6127108311156111ee576040516319657ef560e21b815260040160405180910390fd5b606580546001600160a01b038c81166001600160a01b03199283168117909355606980548d83169084168117909155606680548c8416908516179055606780548d84169085168117909155606c80548c85169086168117909155606880548c86169087168117909155606f80548c87169088168117909155606d8b9055606b80548b8816908916811790915560728054978b16979098168717909755604080519889526020890195909552938701929092526060860152608085015260a084015260c0830186905260e08301919091526101008201527f5837dbc33bffef5199122d5b056b6e75a86bf449601a329c5cc609eda480f42b906101200160405180910390a150505050505050505050565b6113066114de565b607980546001600160a01b0319166001600160a01b0383161790556040517f9c43138fce295e7f53901b28ae498349b95eb9c03de47f46a7fb0bdac44adbf490610a1a90839061238d565b606a546001600160a01b0316331461137c5760405163225a522560e01b815260040160405180910390fd5b611388848484846118a1565b50505050565b6113966114de565b607880546001600160a01b0319166001600160a01b0383161790556040517fe7784c440fe7f140cab32158ebe85404a56d7f1c87de05e7a44572740e4bc9d490610a1a90839061238d565b6113e96114de565b6001600160a01b03811661144e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a6565b6114578161157b565b50565b6114626114de565b607380546001600160a01b038581166001600160a01b0319928316811790935560748054868316908416811790915560758054928616929093168217909255604080519384526020840192909252908201527fe4fab6f20f29a5f599519758b16e1cb9b8946ffd3bae0363a814c348ec55cb5a90606001610cb4565b336114e7610c22565b6001600160a01b031614610a6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a6565b6001600160a01b03163b151590565b600054610100900460ff166115735760405162461bcd60e51b81526004016108a690612e1b565b610a6f611a5d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b805160005b81811015610c445760695483516000916001600160a01b03169063dcf844a79086908590811061160457611604612b5d565b60200260200101516040518263ffffffff1660e01b8152600401611628919061238d565b602060405180830381865afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612bf1565b11156116915761169183828151811061168457611684612b5d565b6020026020010151611770565b60008382815181106116a5576116a5612b5d565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116d8919061238d565b602060405180830381865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190612bf1565b905080156117445761174484838151811061173657611736612b5d565b602002602001015182611a8d565b506001016115d2565b6001600160a01b03831661176557610c448282611b53565b610c44838383611bf2565b60695460405163dcf844a760e01b81526001600160a01b0390911690633bff2916908390839063dcf844a7906117aa90849060040161238d565b602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117eb9190612bf1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152306044820152606401600060405180830381600087803b15801561183757600080fd5b505af1158015610b70573d6000803e3d6000fd5b610c448363a9059cbb60e01b848460405160240161186a929190612e66565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c2d565b6065546040516370a0823160e01b81526000916001600160a01b0316906370a08231906118d290309060040161238d565b602060405180830381865afa1580156118ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119139190612bf1565b90506000607b548211611927576000611934565b607b546119349083612e7f565b905061194284612710612e92565b60705461194f9084612e92565b101561196e576040516359f2bb7d60e01b815260040160405180910390fd5b8315611a0d57606b5460405163867100b160e01b81526001600160a01b039091169063867100b1906119a69088908790600401612a51565b600060405180830381600087803b1580156119c057600080fd5b505af11580156119d4573d6000803e3d6000fd5b5050606b546065546119f593506001600160a01b039081169250168661184b565b83607b6000828254611a079190612e7f565b90915550505b6000611a198783611cff565b90507fe617cea2bce685aba16eff477109e19a228e4a011b1e9c844972f5404e582f568682604051611a4c929190612a51565b60405180910390a150505050505050565b600054610100900460ff16611a845760405162461bcd60e51b81526004016108a690612e1b565b610a6f3361157b565b80600003611a99575050565b6065546001600160a01b0390811690831603611ab3575050565b607254611acd906001600160a01b0384811691168361184b565b6072546001600160a01b0383811660009081526071602052604090819020905163098f2cc560e31b81529190921691634c79662891611b10918591600401612ea9565b6020604051808303816000875af1158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190612bf1565b6001600160a01b038216611b7a576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611bc7576040519150601f19603f3d011682016040523d82523d6000602084013e611bcc565b606091505b5050905080610c44578282604051631196f20d60e21b81526004016108a6929190612e66565b6001600160a01b038216611c19576040516306b7a93160e41b815260040160405180910390fd5b610c446001600160a01b038416838361184b565b6000611c82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661217a9092919063ffffffff16565b805190915015610c445780806020019051810190611ca09190612f05565b610c445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108a6565b600080607b5490506000606560009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612f22565b611d8b90601e612f45565b60ff1690506000611d9d82600a613042565b607960009054906101000a90046001600160a01b03166001600160a01b0316634ecd3a096040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e149190612bf1565b611e1e919061304e565b905082811015611e32578083039250611e36565b5060005b6000612710606d5485611e499190612e92565b611e53919061304e565b905060006127106076548887611e699190613070565b611e739190612e92565b611e7d919061304e565b905060008183611e8d8a89613070565b611e979190612e7f565b611ea19190612e7f565b90506000612710607a5483611eb69190612e92565b611ec0919061304e565b90506000611ece8284612e7f565b60655460685460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b392611f069216908990600401612e66565b6020604051808303816000875af1158015611f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f499190612f05565b5060685460405163388051af60e11b81526001600160a01b0390911690637100a35e90611f7c9088908f90600401612a51565b600060405180830381600087803b158015611f9657600080fd5b505af1158015611faa573d6000803e3d6000fd5b5050606554606f5460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b39350611fe592909116908590600401612e66565b6020604051808303816000875af1158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190612f05565b50606f5460405163388051af60e11b81526001600160a01b0390911690637100a35e9061205b9084908f90600401612a51565b600060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b50506077546065546120aa93506001600160a01b039081169250168661184b565b6078546065546120c7916001600160a01b0391821691168461184b565b8515612169576079546001600160a01b0316632d7097af6120e989600a613042565b6120f39089612e92565b6120fc90613083565b6040518263ffffffff1660e01b815260040161211a91815260200190565b600060405180830381600087803b15801561213457600080fd5b505af1158015612148573d6000803e3d6000fd5b505060785460655461216993506001600160a01b039081169250168861184b565b509596505050505050505b92915050565b60606121898484600085612191565b949350505050565b6060824710156121f25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108a6565b600080866001600160a01b0316858760405161220e91906130c3565b60006040518083038185875af1925050503d806000811461224b576040519150601f19603f3d011682016040523d82523d6000602084013e612250565b606091505b50915091506122618783838761226c565b979650505050505050565b606083156122d95782516000036122d2576122868561153d565b6122d25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108a6565b5081612189565b61218983838151156122ee5781518083602001fd5b8060405162461bcd60e51b81526004016108a691906130df565b82805482825590600052602060002090810192821561235b579160200282015b8281111561235b5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612328565b5061236792915061236b565b5090565b5b80821115612367576000815560010161236c565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6000602082840312156123b357600080fd5b5035919050565b6001600160a01b038116811461145757600080fd5b6000602082840312156123e157600080fd5b81356123ec816123ba565b9392505050565b60008060008060008060008060008060006101608c8e03121561241557600080fd5b8b35612420816123ba565b9a5060208c0135612430816123ba565b995060408c0135612440816123ba565b985060608c0135612450816123ba565b975060808c0135612460816123ba565b965060a08c0135612470816123ba565b955060c08c0135612480816123ba565b945060e08c013593506101008c0135612498816123ba565b92506101208c013591506101408c01356124b1816123ba565b809150509295989b509295989b9093969950565b600080604083850312156124d857600080fd5b82356124e3816123ba565b946020939093013593505050565b60008083601f84011261250357600080fd5b5081356001600160401b0381111561251a57600080fd5b6020830191508360208260051b850101111561253557600080fd5b9250929050565b6000806000806040858703121561255257600080fd5b84356001600160401b038082111561256957600080fd5b612575888389016124f1565b9096509450602087013591508082111561258e57600080fd5b5061259b878288016124f1565b95989497509550505050565b600080604083850312156125ba57600080fd5b82356125c5816123ba565b915060208301356125d5816123ba565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561261e5761261e6125e0565b604052919050565b60006001600160401b0382111561263f5761263f6125e0565b5060051b60200190565b600082601f83011261265a57600080fd5b8135602061266f61266a83612626565b6125f6565b82815260059290921b8401810191818101908684111561268e57600080fd5b8286015b848110156126b25780356126a5816123ba565b8352918301918301612692565b509695505050505050565b6000602082840312156126cf57600080fd5b81356001600160401b038111156126e557600080fd5b61218984828501612649565b60008060006060848603121561270657600080fd5b8335612711816123ba565b92506020840135612721816123ba565b929592945050506040919091013590565b60008060006060848603121561274757600080fd5b83359250602084013591506040840135612760816123ba565b809150509250925092565b60008060006040848603121561278057600080fd5b83356001600160401b038082111561279757600080fd5b818601915086601f8301126127ab57600080fd5b8135818111156127ba57600080fd5b87602060c0830285010111156127cf57600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561281d57835183529284019291840191600101612801565b50909695505050505050565b60008060006060848603121561283e57600080fd5b83356001600160401b038082111561285557600080fd5b61286187838801612649565b945060209150818601358181111561287857600080fd5b61288488828901612649565b94505060408601358181111561289957600080fd5b86019050601f810187136128ac57600080fd5b80356128ba61266a82612626565b81815260059190911b820183019083810190898311156128d957600080fd5b928401925b8284101561290957833562ffffff811681146128fa5760008081fd5b825292840192908401906128de565b80955050505050509250925092565b6000806000806000806000806000806101408b8d03121561293857600080fd5b8a35612943816123ba565b995060208b0135612953816123ba565b985060408b0135612963816123ba565b975060608b0135612973816123ba565b965060808b0135612983816123ba565b955060a08b0135612993816123ba565b945060c08b01356129a3816123ba565b935060e08b013592506101008b01356129bb816123ba565b91506101208b01356129cc816123ba565b809150509295989b9194979a5092959850565b600080600080608085870312156129f557600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a2657600080fd5b8335612a31816123ba565b92506020840135612a41816123ba565b91506040840135612760816123ba565b918252602082015260400190565b8183526000602080850194508260005b85811015612a9d578135612a82816123ba565b6001600160a01b031687529582019590820190600101612a6f565b509495945050505050565b604081526000612abc604083018688612a5f565b60208382038185015281858352818301905060058287821b8501018860005b89811015612b4c57868303601f190185528135368c9003601e19018112612b0157600080fd5b8b0186810190356001600160401b03811115612b1c57600080fd5b80861b3603821315612b2d57600080fd5b612b38858284612a5f565b968801969450505090850190600101612adb565b50909b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b8a57600080fd5b8301803591506001600160401b03821115612ba457600080fd5b6020019150600581901b360382131561253557600080fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103612be857612be8612bbc565b60010192915050565b600060208284031215612c0357600080fd5b5051919050565b801515811461145757600080fd5b600060c08284031215612c2a57600080fd5b60405160c081016001600160401b0381118282101715612c4c57612c4c6125e0565b6040528235612c5a816123ba565b808252506020830135602082015260408301356040820152606083013560608201526080830135608082015260a0830135612c9481612c0a565b60a08201529392505050565b600081518084526020808501945080840160005b83811015612a9d5781516001600160a01b031687529582019590820190600101612cb4565b60208152612ceb602082018351612380565b60006020830151612cff6040840182612380565b506040830151612d126060840182612380565b506060830151612d256080840182612380565b5060808301516101608060a0850152612d42610180850183612ca0565b915060a0850151601f198584030160c0860152612d5f8382612ca0565b92505060c085015160e085015260e0850151610100818187015280870151915050610120612d908187018315159052565b860151610140868101919091529095015193019290925250919050565b606081526000612dc06060830186612ca0565b602083820381850152612dd38287612ca0565b8481036040860152855180825282870193509082019060005b81811015612e0d57845162ffffff1683529383019391830191600101612dec565b509098975050505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b03929092168252602082015260400190565b8181038181111561217457612174612bbc565b808202811582820484141761217457612174612bbc565b60006040820184835260206040818501528185548084526060860191508660005282600020935060005b81811015612ef85784546001600160a01b031683526001948501949284019201612ed3565b5090979650505050505050565b600060208284031215612f1757600080fd5b81516123ec81612c0a565b600060208284031215612f3457600080fd5b815160ff811681146123ec57600080fd5b60ff828116828216039081111561217457612174612bbc565b600181815b80851115612f99578160001904821115612f7f57612f7f612bbc565b80851615612f8c57918102915b93841c9390800290612f63565b509250929050565b600082612fb057506001612174565b81612fbd57506000612174565b8160018114612fd35760028114612fdd57612ff9565b6001915050612174565b60ff841115612fee57612fee612bbc565b50506001821b612174565b5060208310610133831016604e8410600b841016171561301c575081810a612174565b6130268383612f5e565b806000190482111561303a5761303a612bbc565b029392505050565b60006123ec8383612fa1565b60008261306b57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561217457612174612bbc565b6000600160ff1b820161309857613098612bbc565b5060000390565b60005b838110156130ba5781810151838201526020016130a2565b50506000910152565b600082516130d581846020870161309f565b9190910192915050565b60208152600082518060208401526130fe81604085016020870161309f565b601f01601f1916919091016040019291505056fea2646970667358221220e2f072fbc2d37b03a471b17f4e0fa6771fab2f4011f020200c0bc4ed483a11b564736f6c63430008120033