3 txs
4 calls
constructor
constructor(address _npm, address _aeroToken, address _vault, address _universalRouter, address _zeroxAllowanceHolder, address _feeWithdrawer)
functions
aeroToken
viewfunction aeroToken() view returns (address)
factory
viewfunction factory() view returns (address)
feeWithdrawer
viewfunction feeWithdrawer() view returns (address)
isVaultPosition
viewfunction isVaultPosition(uint256) view returns (bool)
MAX_REWARD_X64
viewfunction MAX_REWARD_X64() view returns (uint64)
nonfungiblePositionManager
viewfunction nonfungiblePositionManager() view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
poolToGauge
viewfunction poolToGauge(address) view returns (address)
positionOwners
viewfunction positionOwners(uint256) view returns (address)
tokenIdToGauge
viewfunction tokenIdToGauge(uint256) view returns (address)
totalRewardX64
viewfunction totalRewardX64() view returns (uint64)
transformApprovals
viewfunction transformApprovals(address, uint256, address) view returns (bool)
transformedTokenId
viewfunction transformedTokenId() view returns (uint256)
transformerAllowList
viewfunction transformerAllowList(address) view returns (bool)
universalRouter
viewfunction universalRouter() view returns (address)
v3Utils
viewfunction v3Utils() view returns (address)
vault
viewfunction vault() view returns (address)
weth
viewfunction weth() view returns (address)
zeroxAllowanceHolder
viewfunction zeroxAllowanceHolder() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
approveTransform
nonpayablefunction approveTransform(uint256 tokenId, address transformer, bool isActive)
claimRewards
nonpayablefunction claimRewards(uint256 tokenId)
compoundRewards
nonpayablefunction compoundRewards(uint256 tokenId, bytes swapData0, bytes swapData1, uint256 minAmount0, uint256 minAmount1, uint256 aeroSplitBps, uint256 deadline)
executeChangeRange
nonpayablefunction executeChangeRange(uint256 tokenId, uint24 newFee, int24 newTickLower, int24 newTickUpper, uint128 liquidityToRemove, uint256 deadline, address targetToken, bytes v3SwapData0, bytes v3SwapData1, uint256 aeroSplitBps, bool shouldCompound) returns (uint256 newTokenId)
executeV3UtilsWithOptionalCompound
nonpayablefunction executeV3UtilsWithOptionalCompound(uint256 tokenId, tuple instructions, bool shouldCompound, bytes aeroSwapData0, bytes aeroSwapData1, uint256 minAeroAmount0, uint256 minAeroAmount1, uint256 aeroSplitBps) returns (uint256 newTokenId)
migrateToVault
nonpayablefunction migrateToVault(uint256 tokenId, address recipient)
onERC721Received
nonpayablefunction onERC721Received(address, address from, uint256 tokenId, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeWithdrawer
nonpayablefunction setFeeWithdrawer(address _feeWithdrawer)
setGauge
nonpayablefunction setGauge(address pool, address gauge)
setReward
nonpayablefunction setReward(uint64 _totalRewardX64)
setTransformer
nonpayablefunction setTransformer(address transformer, bool active)
setV3Utils
nonpayablefunction setV3Utils(address _v3Utils)
stakePosition
nonpayablefunction stakePosition(uint256 tokenId)
swapAndIncreaseStakedPosition
payablefunction swapAndIncreaseStakedPosition(uint256 tokenId, tuple params) payable returns (uint128 liquidity, uint256 amount0, uint256 amount1)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transform
nonpayablefunction transform(uint256 tokenId, address transformer, bytes data) returns (uint256 newTokenId)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
unstakePosition
nonpayablefunction unstakePosition(uint256 tokenId)
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, address to)
events
ApprovedTransform
event ApprovedTransform(uint256 indexed tokenId, address indexed owner, address indexed transformer, bool isActive)
FeesWithdrawn
event FeesWithdrawn(address token, address to, uint256 amount)
FeeWithdrawerUpdated
event FeeWithdrawerUpdated(address withdrawer)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PositionMigratedToVault
event PositionMigratedToVault(uint256 indexed tokenId, address indexed owner)
PositionStaked
event PositionStaked(uint256 indexed tokenId, address indexed owner)
PositionTransformed
event PositionTransformed(uint256 indexed oldTokenId, uint256 indexed newTokenId, address indexed owner)
PositionUnstaked
event PositionUnstaked(uint256 indexed tokenId, address indexed owner)
RewardsCompounded
event RewardsCompounded(uint256 indexed tokenId, uint256 aeroAmount, uint256 amount0, uint256 amount1)
RewardUpdated
event RewardUpdated(address account, uint64 totalRewardX64)
Swap
event Swap(address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut)
SwapAndIncreaseLiquidity
event SwapAndIncreaseLiquidity(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1)
TransformerSet
event TransformerSet(address indexed transformer, bool active)
V3UtilsSet
event V3UtilsSet(address indexed v3Utils)
errors
AlreadyStaked
error AlreadyStaked()
AmountError
error AmountError()
ChainlinkPriceError
error ChainlinkPriceError()
CollateralFactorExceedsMax
error CollateralFactorExceedsMax()
CollateralFail
error CollateralFail()
CollateralValueLimit
error CollateralValueLimit()
CollectError
error CollectError()
DailyDebtIncreaseLimit
error DailyDebtIncreaseLimit()
DailyLendIncreaseLimit
error DailyLendIncreaseLimit()
DebtChanged
error DebtChanged()
EtherSendFailed
error EtherSendFailed()
ExceedsMaxReward
error ExceedsMaxReward()
GaugeManagerNotSet
error GaugeManagerNotSet()
GaugeNotSet
error GaugeNotSet()
GlobalDebtLimit
error GlobalDebtLimit()
GlobalLendLimit
error GlobalLendLimit()
InsufficientLiquidity
error InsufficientLiquidity()
InterestNotUpdated
error InterestNotUpdated()
InvalidConfig
error InvalidConfig()
InvalidPool
error InvalidPool()
InvalidTickSpacing
error InvalidTickSpacing()
InvalidToken
error InvalidToken()
MinLoanSize
error MinLoanSize()
MissingSwapData
error MissingSwapData()
NeedsRepay
error NeedsRepay()
NoEtherToken
error NoEtherToken()
NoLiquidity
error NoLiquidity()
NoSharesRepayed
error NoSharesRepayed()
NotConfigured
error NotConfigured()
NotDepositor
error NotDepositor()
NotEnoughReward
error NotEnoughReward()
NotLiquidatable
error NotLiquidatable()
NotReady
error NotReady()
NotStaked
error NotStaked()
NotSupportedFeeTier
error NotSupportedFeeTier()
NotSupportedWhatToDo
error NotSupportedWhatToDo()
NotWETH
error NotWETH()
PriceDifferenceExceeded
error PriceDifferenceExceeded()
Reentrancy
error Reentrancy()
RewardClaimFailed
error RewardClaimFailed()
SameRange
error SameRange()
SameToken
error SameToken()
SelfSend
error SelfSend()
SequencerDown
error SequencerDown()
SequencerGracePeriodNotOver
error SequencerGracePeriodNotOver()
SequencerUptimeFeedInvalid
error SequencerUptimeFeedInvalid()
SlippageError
error SlippageError()
SwapAmountTooLarge
error SwapAmountTooLarge()
SwapFailed
error SwapFailed()
TooMuchEtherSent
error TooMuchEtherSent()
TransferError
error TransferError()
TransformFailed
error TransformFailed()
TransformNotAllowed
error TransformNotAllowed()
TWAPCheckFailed
error TWAPCheckFailed()
Unauthorized
error Unauthorized()
WrongContract
error WrongContract()
creation bytecode
0x610160604081815234620003d05760c08262006164803803809162000025828562000426565b833981010312620003d05781516001600160a01b039182821691829003620003d057602080850151938085168503620003d05782860151938185168503620003d05762000075606088016200045e565b6200009160a06200008960808b016200045e565b99016200045e565b9160018060a01b03199485600154166001555f5433878216175f55875190863391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360016002556312a9293f60e21b81528181600481865afa908115620003dc579086915f91620003e6575b5016608052865163c45a015560e01b81528181600481865afa918215620003dc575f926200039a575b505060a05260c05260e05261010096875260038054600160a01b600160e01b031916905561012095865261014094855260048054909316911617905551615cf09390929084620004748539608051848181612aaf0152613cad015260a05184818161030b015281816108cd0152610c7e015260c0518481816107c901528181610cf00152818161132c01528181611377015281816115ae01528181611685015281816116bc015281816116f2015281816117290152818161179d015281816118260152818161187901528181612058015281816128ed01528181612c2001528181612f1d01528181612f68015281816131a4015281816135d8015281816137310152818161394d015281816139a001528181613f4f01528181614b4f01528181614c4801528181614c7f01528181614cb501528181614cec01528181614d6001528181614d9d0152614dee015260e051848181612af401528181615531015281816156c5015281816156fa0152615790015251838181610c3901526159c701525182818161075901528181611222015281816112a801528181611a6201528181611ab601528181611b6e01528181611c0d015281816123c50152818161244f015281816124a3015281816127d201528181612e1201528181612e9801528181613258015281816132ac0152818161335101528181613e5d0152818161423201528181614a5f01528181614ae501528181614f8a01528181614fe2015261509c0152518181816102230152818161080501528181611d4901528181612607015281816128c901528181612a72015281816134d301528181613db101528181613f730152818161438901526151b50152f35b90809250813d8311620003d4575b620003b4818362000426565b81010312620003d057620003c8906200045e565b5f806200012a565b5f80fd5b503d620003a8565b88513d5f823e3d90fd5b809250838092503d83116200041e575b62000402818362000426565b81010312620003d0576200041786916200045e565b5f62000101565b503d620003f6565b601f909101601f19168101906001600160401b038211908210176200044a57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620003d05756fe60806040526004361015610011575f80fd5b5f803560e01c8062fc59c0146143b05780630962ef79146141bd5780630b0822e314613ddf5780630c33409d1461366b578063150b7a0214613585578063237e6d641461352b57806325845aeb14612b4c57806332b4fa6b14612b2357806335a9e4df14612ade5780633fc8cef314612a995780634a235eb61461275b5780635ced83851461271c57806362474ea1146126e9578063625138ef14612687578063715018a61461263557806378cc764414611f2657806379ba509714611e7b5780638375cf4214611e58578063860d3ebe14611ddf5780638a030fbe14611d775780638bcd578e14610eec5780638da5cb5b14610ec5578063936b8dd014610e2157806393c1e95d14610df85780639995dfd814610d79578063aa3f22b814610d3d578063ae41abab14610d1f578063b44a272214610cda578063b526b8e614610cad578063c45a015514610c68578063d2a5e66d14610c23578063d654b2ee14610bf0578063d8ad9cf614610788578063d956ba9f14610743578063e30c39781461071a578063f069143d1461064a578063f2fde38b146105dd578063f7e7aab01461040d578063fa461e3314610252578063fbfa77cf1461020d5763fe210660146101dc575f80fd5b3461020a57602036600319011261020a5760ff60406020926004358152600884522054166040519015158152f35b80fd5b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a57606036600319011261020a576004356024356044356001600160401b0381116104095761028990369060040161447a565b92909184821393848015610400575b156103fc5783606091810103126103f8576102b283614448565b6103066020918262ffffff6102d460406102cd848b01614448565b99016144a7565b6040516328af8d0b60e01b81526001600160a01b039485169994959094859384931660020b9087168b600485016151e3565b0381857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103ed5788916103b4575b501690811561037a575033036103695761035e93156103615750905b33906152eb565b80f35b905090610357565b6040516282b42960e81b8152600490fd5b6064906040519062461bcd60e51b825260048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152fd5b90508281813d83116103e6575b6103cb8183614588565b810103126103e2576103dc906147d8565b5f61033b565b8780fd5b503d6103c1565b6040513d8a823e3d90fd5b8480fd5b8580fd5b50858213610298565b8380fd5b503461020a57604036600319011261020a576001600160401b036004358181116105d957366023820112156105d95780600401359182116105d9576024916024820191602436918360051b01011161040957610467614432565b91610470615297565b6004546001600160a01b03908116330361059f57855b8381106104965786600160025580f35b816104aa6104a5838787615208565b61522c565b169060405180926370a0823160e01b8252306004830152818960209384935afa90811561059457849188918b9161055d575b5060019450878785836104f6575b50505050505001610486565b7f5e110f8bc8a20b65dcc87f224bdf1cc039346e267118bae2739847f07321ffa89561052b6104a58793610531968896615208565b166152eb565b61054f6105426104a5868b8b615208565b916040519384938461492a565b0390a182865f8787856104ea565b9250505082813d831161058d575b6105758183614588565b81010312610589578286600193515f6104dc565b5f80fd5b503d61056b565b6040513d8b823e3d90fd5b60405162461bcd60e51b81526020600482015260126024820152712737ba103332b2903bb4ba34323930bbb2b960711b6044820152606490fd5b8280fd5b503461020a57602036600319011261020a576105f761441c565b6105ff615240565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b503461020a57602036600319011261020a576004356001600160401b038116908181036105d957610679615240565b670ccccccccccccccc82116106e65760038054600160a01b600160e01b03191660a09290921b600160a01b600160e01b03169190911790556040805133815260208101929092527f4f8e1611b968330cd0bb35a8eb118e101c3150d89857953901527628483bc9ed91a180f35b60405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606490fd5b503461020a578060031936011261020a576001546040516001600160a01b039091168152602090f35b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a57602080600319360112610a35576004356107a6615297565b6040516331a9108f60e11b808252600482018390526001600160a01b03939160247f0000000000000000000000000000000000000000000000000000000000000000861684838381845afa9283156103ed578893610bb9575b508785887f0000000000000000000000000000000000000000000000000000000000000000168481331497885f14610bad57604051948593849283528c60048401525af180156105945788918a91610b71575b505b16968715610b3d57848515610b32575b61086d9061466e565b8860405163133f757160e31b815288600482015261018080828781885afa908115610a4d57899284918593610aed575b5050906108c862ffffff9260405195869485946328af8d0b60e01b86521660020b91600485016151e3565b0381857f0000000000000000000000000000000000000000000000000000000000000000165afa8015610ae25782918b91610aa6575b5016895260058652604089205416928315610a775790889291813b15610409578388610941926040519384928392632142170760e11b845230906004850161492a565b038183865af1908115610a6c578491610a58575b5050803b156105d95782604051809263095ea7b360e01b825281838161097f8d8b60048401614732565b03925af1908115610a4d578391610a39575b5050823b15610a355781604051809263b6b55f2560e01b82528860048301528183875af18015610a2a57610a16575b5092600891856109fd9552600682526040882060018060a01b0319918282541617905560078252866040892091825416179055526040852061497b565b5f80516020615c708339815191528380a3600160025580f35b610a1f906144d9565b6103fc57855f6109c0565b6040513d84823e3d90fd5b5080fd5b610a42906144d9565b610a3557815f610991565b6040513d85823e3d90fd5b610a61906144d9565b6105d957825f610955565b6040513d86823e3d90fd5b60405162461bcd60e51b815260048101879052600881850152674e6f20676175676560c01b6044820152606490fd5b809250888092503d8311610adb575b610abf8183614588565b81010312610ad757610ad182916147d8565b5f6108fe565b8980fd5b503d610ab5565b6040513d8c823e3d90fd5b6108c8955062ffffff9350610b179250803d10610b2b575b610b0f8183614588565b81019061480e565b50505050505050969250925091949261089d565b503d610b05565b508381163314610864565b60405162461bcd60e51b815260048101879052600d818501526c24b73b30b634b21037bbb732b960991b6044820152606490fd5b809250878092503d8311610ba6575b610b8a8183614588565b81010312610ba257610b9c88916147d8565b5f610852565b8880fd5b503d610b80565b50505050508633610854565b9092508481813d8311610be9575b610bd18183614588565b810103126103e257610be2906147d8565b915f6107ff565b503d610bc7565b503461020a57602036600319011261020a57602090600435815260068252604060018060a01b0391205416604051908152f35b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a578060031936011261020a5760035460405160a09190911c6001600160401b03168152602090f35b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a578060031936011261020a576020600a54604051908152f35b503461020a57602036600319011261020a576020906001600160a01b039060409082610d6761441c565b16815260058452205416604051908152f35b503461020a57604036600319011261020a57610d9361441c565b6024359081151590818303610589577fc1ae9c8c4372785510259fc6123e9da89f0dd647548066a5a7af769936393fad91610dee602092610dd2615240565b6001600160a01b0316808752600984526040872090959061497b565b604051908152a280f35b503461020a578060031936011261020a576003546040516001600160a01b039091168152602090f35b503461020a57606036600319011261020a57600435610e3e614432565b90610e4761461a565b90808452600760205260018060a01b03610e688160408720541633146146f1565b338552600b6020526040852082865260205260408520931692835f52602052610e948260405f2061497b565b60405191151582527f44013414411d9b618e7674007dae03364d11d6be08d121c1aef8aed60dce7c5160203393a480f35b503461020a578060031936011261020a57546040516001600160a01b039091168152602090f35b503461020a5760031961010036820112610a35576001600160401b0360243511610a3557610300906024353603011261020a57604051610f2b81614500565b6024356004013560038110156105d9578152610f4a6024803501614448565b602082015260243560448101356040830152606481013560608301526084810135608083015260a481013560a08301526001600160401b0360c49091013511610a3557610fa23660243560c4810135016004016145fc565b60c082015260243560e481013560e08301526101048101356101008301526001600160401b036101249091013511610a3557610fea36602435610124810135016004016145fc565b610120820152610fff610144602435016144c5565b610140820152611014610164602435016144c5565b610160820152611029610184602435016144a7565b61018082015261103e6101a4602435016144b7565b6101a08201526110536101c4602435016144b7565b6101c08201526110686101e4602435016144c5565b6101e08201526024356102048101356102008301526102248101356102208301526102448101356102408301526110a29061026401614448565b6102608201526110b761028460243501614448565b6102808201526024356102a401358015159003610589576024356102a48101356102a08301526001600160401b036102c49091013511610a3557611107366024356102c4810135016004016145fc565b6102c08201526001600160401b036024356102e4013511610a3557611138366024356102e4810135016004016145fc565b6102e082015261114661461a565b6001600160401b03606435116105d957611165366064356004016145fc565b926001600160401b036084351161020a5750611186366084356004016145fc565b905f93611191615297565b6003546111a8906001600160a01b03161515614793565b6004355f52600760205260018060a01b0360405f20541692600860205260ff60405f205416918433148015611d3d575b6111e19061466e565b6004355f908152600660205260409020546001600160a01b0316916112078315156146ab565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611d00575f91611d0b575b50833b1561058957604051631c4b774b60e01b815260048035908201525f8160248183895af18015611d0057611ced575b506040516370a0823160e01b8152306004820152906020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610ae2578a90611cb9575b6112e992506146e4565b833b15610ba25788604051632e1a7d4d60e01b815260043560048201528181602481838a5af18015610a2a57611ca5575b506003546001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000163b15610a355760405163095ea7b360e01b8152600480820192909252903560248201528181604481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610a2a57611c91575b505060018060a01b036003541697604051986306e1929d60e51b8a5260043560048b0152604060248b015281516003811015611c7d576020918b91604483015260018060a01b038385015116606483015260408401516084830152606084015160a4830152608084015160c483015260a084015160e4830152818d8161156461154c61147c61144d60c08b015161030061010487015261034486019061476e565b60e08b01516101248601526101008b01516101448601526101208b01518582036043190161016487015261476e565b6101408a01516001600160801b039081166101848601526101608b015181166101a48601526101808b015162ffffff166101c48601526101a08b0151600290810b6101e48701526101c08c0151900b6102048601526101e08b0151166102248501526102008a01516102448501526102208a01516102648501526102408a01516102848501526102608a01516001600160a01b039081166102a48601526102808b0151166102c48501526102a08a015115156102e48501526102c08a01518482036043190161030486015261476e565b6102e08901518382036043190161032485015261476e565b03925af1988915610ae2578a99611c49575b508815611c405788965b80611c37575b15611bf657610240015160405163133f757160e31b81526004810188905293610180856024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611beb578b958c92611bb8575b508b948c918051611b40575b508051611a45575b5060035460a01c6001600160401b0316948015604082901b829004600160401b141715611a3157600160401b86018611611a315761164490600160401b87019060401b614650565b94818060401b04600160401b1482151715611a31579160606116778e9593611798989795600160401b019060401b614650565b926116ae6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908b1661534f565b6116e5876001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908c1661539f565b61171b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690851661534f565b611752846001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690861661539f565b6040519061175f82614537565b8c8252876020830152846040830152868383015286608083015260a08201526040518098819263219f5d1760e01b83526004830161498c565b0381877f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610a6c578a975f80516020615c908339815191529786946119ed575b50611800846117fa8861182098999a6146e4565b936146e4565b918d816119d3575b915050816119b9575b505050604051938493846149ca565b0390a25b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156103fc5760405163095ea7b360e01b81528690818180611874888760048401614732565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610a2a576119a5575b5050803b156103fc5760405163b6b55f2560e01b815260048101849052868160248183865af1801561199a57611986575b50946119375f80516020615c708339815191529260209787611946575b85845260068952604080852080546001600160a01b0319908116909317905560078a528085208054909216881790915560088952832061497b565b80a36001600255604051908152f35b600435845260068952604080852080546001600160a01b031990811690915560078b528186208054909116905560088a528420805460ff191690556118fc565b61199087916144d9565b6103fc575f6118df565b6040513d89823e3d90fd5b6119ae906144d9565b6103fc57855f6118ae565b6119cb926001600160a01b03166152eb565b5f808b611811565b6119e5926001600160a01b03166152eb565b5f808d611808565b6118209596506117fa979450611a1d6118009160603d606011611a2a575b611a158183614588565b8101906148b6565b9699509796506117e69050565b503d611a0b565b634e487b7160e01b8d52601160045260248dfd5b6040516370a0823160e01b815230600482015291506020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611b35578d91611aff575b611af7925060405191611aac8361451c565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116845285166020840152604083015260c43560608301526080820152615488565b90505f6115fc565b90506020823d602011611b2d575b81611b1a60209383614588565b8101031261058957611af7915190611a9a565b3d9150611b0d565b6040513d8f823e3d90fd5b611baf919650612710611b5560e43588614629565b049060405191611b648361451c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811684528a166020840152604083015260a43560608301526080820152615488565b9050945f6115f4565b909550611bd691506101803d61018011610b2b57610b0f8183614588565b5050505050505050969250905094905f6115e8565b6040513d8d823e3d90fd5b5091505080611c06575b50611824565b611c3190857f00000000000000000000000000000000000000000000000000000000000000006152eb565b5f611c00565b50811515611586565b60043596611580565b9098506020813d602011611c75575b81611c6560209383614588565b810103126105895751975f611576565b3d9150611c58565b634e487b7160e01b8c52602160045260248cfd5b611c9a906144d9565b610ba257885f6113ac565b611cae906144d9565b610ba257885f61131a565b506020823d602011611ce5575b81611cd360209383614588565b81010312610589576112e991516112df565b3d9150611cc6565b611cf89199506144d9565b5f975f61128b565b6040513d5f823e3d90fd5b90506020813d602011611d35575b81611d2660209383614588565b8101031261058957515f61125a565b3d9150611d19565b508280156111d85750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146111d8565b503461020a57602036600319011261020a57611d9161441c565b611d99615240565b600380546001600160a01b0319166001600160a01b039290921691821790557f1d356ed287d61c48ec07dd14823d985250b998141d556acf43bec0e3b8663aed8280a280f35b503461020a5760e036600319011261020a576001600160401b036024358181116105d957611e1190369060040161447a565b9060443592831161040957611e2d611e5093369060040161447a565b929091611e38615297565b60c4359360a4359360843593606435936004356149e0565b600160025580f35b503461020a578060031936011261020a576020604051670ccccccccccccccc8152f35b503461020a578060031936011261020a576001546001600160a01b033381831603611ecf5760018060a01b03198092166001555f549133908316175f553391165f80516020615cd08339815191525f80a380f35b60405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608490fd5b503461020a57606036600319011261020a57611f40614432565b906044356001600160401b038111610a3557611f6090369060040161447a565b611f68615297565b6004358352600760205260018060a01b0360408420541690600860205260ff6040852054169482331480156125fb575b80156125e9575b80156125b8575b611faf9061466e565b6001600160a01b03811685526009602052604085205460ff161561257957600a5461254757600435600a8190558552600660205260408520546001600160a01b031691611ffd8315156146ab565b806004116103fc5784356001600160e01b031916629b4e9f60e21b146123aa575b823b156103fc57604051632e1a7d4d60e01b81526004803590820152602492908781858183895af180156103ed57908891612396575b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b156103e2576040519663095ea7b360e01b978881528981806120ab6004358860048401614732565b038183895af18015610ae257908a93929161237c575b509082809492826040519384928337810182815203925af16120e161494c565b501561234557600a54946040516331a9108f60e11b81528660048201526020818581865afa9081156103ed57889161230b575b50306001600160a01b03909116036122cf57813b156122b7576040518181525f60048201528684820152878160448183875af180156103ed579088916122bb575b5050813b156122b757869060405192839182528183816121798b8a60048401614732565b03925af180156122ac57908691612298575b5050813b156103f85784604051809263b6b55f2560e01b82528660048301528183865af1801561228d57612279575b506020946004358403612203575b505082600a5581604051937f504222903b44393594773e379c198a93d2429219e6d047e347a4f81b64129f066004359180a460016002558152f35b61227291600435865260068752604086209060018060a01b0319918281541690556007885260408720828154169055600888526040872060ff1981541690558587526006885260408720908282541617905560078752836040872091825416179055600886526040852061497b565b5f806121c8565b61228385916144d9565b610409575f6121ba565b6040513d87823e3d90fd5b6122a1906144d9565b6103f857845f61218b565b6040513d88823e3d90fd5b8680fd5b6122c4906144d9565b6122b757865f612155565b60405162461bcd60e51b81526020600482015260158185015274141bdcda5d1a5bdb881b9bdd081c995d1d5c9b9959605a1b6044820152606490fd5b90506020813d60201161233d575b8161232660209383614588565b810103126103e257612337906147d8565b5f612114565b3d9150612319565b60405162461bcd60e51b8152602060048201526010818401526f151c985b9cd99bdc9b4819985a5b195960821b6044820152606490fd5b61238990939192936144d9565b610ba2579088915f6120c1565b61239f906144d9565b6122b757865f612054565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561199a578791612515575b50833b156122b757604051631c4b774b60e01b81526004803590820152878160248183895af180156103ed57908891612501575b50506040516370a0823160e01b8152306004820152906020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156103ed5788906124cd575b61249092506146e4565b8061249c575b5061201e565b6124c790837f00000000000000000000000000000000000000000000000000000000000000006152eb565b5f612496565b506020823d6020116124f9575b816124e760209383614588565b81010312610589576124909151612486565b3d91506124da565b61250a906144d9565b6122b757865f612431565b90506020813d60201161253f575b8161253060209383614588565b8101031261058957515f6123fd565b3d9150612523565b60405162461bcd60e51b815260206004820152600a6024820152695265656e7472616e637960b01b6044820152606490fd5b60405162461bcd60e51b8152602060048201526017602482015276151c985b9cd99bdc9b595c881b9bdd08185b1b1bddd959604a1b6044820152606490fd5b50828552600b60205260408520600435865260205260408520335f52602052611faf60ff60405f2054169050611fa6565b50336001600160a01b03821614611f9f565b50858015611f985750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614611f98565b503461020a578060031936011261020a5761264e615240565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03165f80516020615cd08339815191528280a380f35b503461020a57606036600319011261020a576126a161441c565b6044356001600160a01b03818116939184900361058957604092168152600b602052818120602435825260205220905f52602052602060ff60405f2054166040519015158152f35b503461020a57602036600319011261020a57602090600435815260078252604060018060a01b0391205416604051908152f35b503461020a57602036600319011261020a5760209060ff906040906001600160a01b0361274761441c565b168152600984522054166040519015158152f35b503461020a57602080600319360112610a3557600435612779615297565b8083526007825260408084205460088452908420546001600160a01b039182169391859160ff168080612a6e575b8015612a5c575b6127b79061466e565b84835260068452816040842054166127d08115156146ab565b7f0000000000000000000000000000000000000000000000000000000000000000838116604051906370a0823160e01b8083523060048401528883602481855afa9283156103ed578893612a2a575b50843b156103e257604051631c4b774b60e01b8152600481018b9052908882602481838a5af18015610594578a928a91612a11575b505060246040518094819382523060048301525afa90811561199a5787916129dc575b5090612882916146e4565b88816129cb575b505050803b1561040957838091602460405180948193632e1a7d4d60e01b83528b60048401525af1908115610a6c5784916129b7575b5050156129b057807f000000000000000000000000000000000000000000000000000000000000000016905b7f000000000000000000000000000000000000000000000000000000000000000016803b156105d9578483916129399383604051809681958294632142170760e11b8452306004850161492a565b03925af18015610a2a5761299c575b5082905260068152604080852080546001600160a01b0319908116909155600783528186208054909116905560089091528320805460ff191690555f80516020615cb08339815191528380a3600160025580f35b6129a5906144d9565b61040957835f612948565b84906128eb565b6129c0906144d9565b6105d957825f6128bf565b6129d4926152eb565b5f8088612889565b80929750888092503d8311612a0a575b6129f68183614588565b810103126105895751899590612882612877565b503d6129ec565b612a1d919293506144d9565b6103e2578890885f612854565b975091508787813d8111612a55575b612a438183614588565b81010312610589578a9651915f61281f565b503d612a39565b50801580156127ae57503386146127ae565b50817f00000000000000000000000000000000000000000000000000000000000000001633146127a7565b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a578060031936011261020a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461020a578060031936011261020a576004546040516001600160a01b039091168152602090f35b503461020a5761016036600319011261020a576024359062ffffff8216820361058957604435918260020b8303610589576064358060020b810361058957608435906001600160801b03821682036105895760c435946001600160a01b03861686036105895760e4356001600160401b0381116103fc57612bd19036906004016145fc565b936001600160401b0361010435116103fc57612bf336610104356004016145fc565b61014435151561014435036105895760405163133f757160e31b81526004803590820152610180816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156103ed579062ffffff939291613501575b506004358852600760205260018060a01b036040892054169660405199612c838b614500565b898b5260018060a01b031660208b01528860408b01528860608b01528860808b01528860a08b015260c08a01528760e08a0152876101008a015261012089015260018060801b0361014089015260018060801b036101608901521661018087015260020b6101a086015260020b6101c085015260018060801b03166101e0840152816102008401528161022084015260a43561024084015261026083015230610280830152806102a0830152604051612d3b8161456d565b8181526102c0830152604051612d508161456d565b8181526102e0830152604051612d658161456d565b81815260405191612d758361456d565b82525f92612d81615297565b600354612d98906001600160a01b03161515614793565b6004355f52600760205260018060a01b0360405f20541691600860205260ff60405f2054169083331480156134c7575b612dd19061466e565b6004355f908152600660205260409020546001600160a01b031690612df78215156146ab565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611d00575f91613495575b50823b1561058957604051631c4b774b60e01b815260048035908201525f8160248183885af18015611d0057613482575b506040516370a0823160e01b8152306004820152906020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561059457899061344e575b612ed992506146e4565b95823b156103e25787604051632e1a7d4d60e01b81526004356004820152818160248183895af18015610a2a5761343a575b506003546001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000163b15610a355760405163095ea7b360e01b8152600480820192909252903560248201528181604481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610a2a57613426575b505060018060a01b036003541696604051976306e1929d60e51b895260043560048a0152604060248a015286516003811015613412576020918a91604483015260018060a01b03838a015116606483015260408901516084830152606089015160a4830152608089015160c483015260a089015160e4830152818c816131568c6102e061314161307161304260c085015161030061010489015261034488019061476e565b60e08501516101248801526101008501516101448801526101208501518782036043190161016489015261476e565b6101408401516001600160801b0390811661018488015261016085015181166101a488015261018085015162ffffff166101c48801526101a0850151600290810b6101e48901526101c0860151900b6102048801526101e0850151166102248701526102008401516102448701526102208401516102648701526102408401516102848701526102608401516001600160a01b039081166102a4880152610280850151166102c48701526102a084015115156102e48701526102c08401518682036043190161030488015261476e565b9101518382036043190161032485015261476e565b03925af19788156105945789986133de575b5087156133d55787955b61014435806133cc575b15611bf657610240015160405163133f757160e31b81526004810188905293610180856024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611beb578b958c92613399575b508b948c80928051613322575b5050805161323b575060035460a01c6001600160401b0316948015604082901b829004600160401b141715611a3157600160401b86018611611a315761164490600160401b87019060401b614650565b6040516370a0823160e01b815230600482015291506020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611b35578d916132ec575b611af79250604051916132a28361451c565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081168452851660208401526040830152606082018e90526080820152615488565b90506020823d60201161331a575b8161330760209383614588565b8101031261058957611af7915190613290565b3d91506132fa565b61338f9297506127106133386101243589614629565b0491604051926133478461451c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811685528b166020850152604084015260608301526080820152615488565b9050948c5f6131eb565b9095506133b791506101803d61018011610b2b57610b0f8183614588565b5050505050505050969250905094905f6131de565b5081151561317c565b60043595613172565b9097506020813d60201161340a575b816133fa60209383614588565b810103126105895751965f613168565b3d91506133ed565b634e487b7160e01b8b52602160045260248bfd5b61342f906144d9565b6103e257875f612f9d565b613443906144d9565b6103e257875f612f0b565b506020823d60201161347a575b8161346860209383614588565b8101031261058957612ed99151612ecf565b3d915061345b565b61348d9198506144d9565b5f965f612e7b565b90506020813d6020116134bf575b816134b060209383614588565b8101031261058957515f612e4a565b3d91506134a3565b50818015612dc85750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612dc8565b61351b906101803d61018011610b2b57610b0f8183614588565b5050505050505050505050612c5d565b503461020a57604036600319011261020a5761354561441c565b61354d614432565b90613556615240565b6001600160a01b03908116835260056020526040832080546001600160a01b0319169290911691909117905580f35b503461020a57608036600319011261020a5761359f61441c565b506135a8614432565b90606435906001600160401b03821161020a57506135ca90369060040161447a565b506001600160a01b039190507f00000000000000000000000000000000000000000000000000000000000000008216330361363b57600a541515918261362f575b5050613624575b604051630a85bd0160e11b8152602090f35b604435600a55613612565b16301490505f8061360b565b60405162461bcd60e51b81526020600482015260086024820152674f6e6c79204e504d60c01b6044820152606490fd5b50600319604036820112610a35576001600160401b0360243511610a35576101e0906024353603011261020a576136a0615297565b6003546136b7906001600160a01b03161515614793565b6004358152600760205260018060a01b03604082205416600860205260ff6040832054169033148015613d9d575b6136ef915061466e565b6004358152600660205260408120546001600160a01b03166137128115156146ab565b60405163133f757160e31b8152600480359082015261018080826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610a6c5784918593613d70575b505034613ca3575b602480350135151580613c84575b6044602435013515159081613c64575b613c26575b613be7575b823b156104095783604051632e1a7d4d60e01b81526004356004820152818160248183895af18015610a2a57613bd3575b505060018060a01b036003541693604051946362fa940560e11b865260206004870152602435600401356024870152602480350135604487015260446024350135606487015260018060a01b03613827606460243501614448565b1660848701526084602435013560a487015260a4602435013560018060a01b03811681036105d957606091879160018060a01b031660c483015260c4602435013560e48301528184816139346138b76138fa6139246138e161389f61010460e4602435013581890152602435016024356004016148d8565b9490610124956101e0878a015261020489019161490a565b936101449060243501358188015261016490602435013581880152602435016024356004016148d8565b92909360231993610184958589840301878a015261490a565b926101a4906024350135818701526101c490602435013581870152602435016024356004016148d8565b91858403016101e486015261490a565b03925af1918215613bc657819482968394613b9b575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156105d95760405163095ea7b360e01b815283818061399b6004358660048401614732565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610a6c57908491613b87575b5050803b156105d95782809160246040518094819363b6b55f2560e01b835260043560048401525af18015610a4d57908391613b73575b50506040516370a0823160e01b808252306004830152949092916001600160a01b031690602084602481855afa938415610a4d578394613b3f575b506040519586523060048701526001600160a01b031692602086602481875afa928315613b335792613afd575b613ad5955080613aeb575b505080613ad9575b50506040517f1aa7d7662b161a8d4058004091e4c60474753d2f085db526dfb22da59838d0a76004359180613ac18589898461445c565b0390a260016002556040519384938461445c565b0390f35b613ae49133906152eb565b5f80613a8a565b613af69133906152eb565b5f80613a82565b91506020853d602011613b2b575b81613b1860209383614588565b8101031261058957613ad5945191613a77565b3d9150613b0b565b604051903d90823e3d90fd5b9093506020813d602011613b6b575b81613b5b60209383614588565b810103126105895751925f613a4a565b3d9150613b4e565b613b7c906144d9565b610a3557815f613a0f565b613b90906144d9565b6105d957825f6139d8565b9195509250613bba91955060603d606011611a2a57611a158183614588565b9591949095925f61394a565b50604051903d90823e3d90fd5b613bdc906144d9565b61040957835f6137cc565b600354613c21906001600160a01b0384811691613c0591168261534f565b60035460446024350135916001600160a01b039091169061539f565b61379b565b600354613c5f906001600160a01b0384811691613c4491168261534f565b600354602480350135916001600160a01b039091169061539f565b613796565b613c7f6024356044013530336001600160a01b038816615327565b613791565b613c9e60248035013530336001600160a01b038616615327565b613781565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690821681148015613d5e575b15613d27578085913b15610a35578160049160405192838092630d0e30db60e41b825234905af18015610a2a57613d13575b5050613773565b613d1c906144d9565b61040957835f613d0c565b60405162461bcd60e51b815260206004820152600f60248201526e2737902ba2aa241034b7103830b4b960891b6044820152606490fd5b506001600160a01b0383168114613cda565b613d8a935080919250903d10610b2b57610b0f8183614588565b5050505050505050925090505f8061376b565b5080613dad575b6136ef906136e5565b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613da4565b503461020a57604036600319011261020a57600435613dfc614432565b90613e05615297565b8083526007602090815260408420546001600160a01b039081169390613e2c3386146146f1565b8386526008835260ff60408720541661417d579085918483526006845280604084205416613e5b8115156146ab565b7f0000000000000000000000000000000000000000000000000000000000000000828116604051906370a0823160e01b8083523060048401528883602481855afa9283156103ed57889361414b575b50843b156103e257604051631c4b774b60e01b8152600481018b9052908882602481838a5af18015610594578a928a91614132575b505060246040518094819382523060048301525afa90811561199a5787916140fd575b5090613f0d916146e4565b88816140ec575b505050803b1561040957838091602460405180948193632e1a7d4d60e01b83528b60048401525af1908115610a6c5784916140d8575b5050807f00000000000000000000000000000000000000000000000000000000000000001691817f00000000000000000000000000000000000000000000000000000000000000001691833b156103f85760405163095ea7b360e01b8152858180613fb98b8860048401614732565b038183895af19081156122ac5786916140c4575b5050604051911685820152848152613fe481614552565b823b156104095761402792849283604051809681958294635c46a7ef60e11b845230600485015260248401528b604484015260806064840152608483019061476e565b03925af18015610a2a576140b0575b5082905260068152604080852080546001600160a01b0319908116909155600783528186208054909116905560089091528320805460ff1916905581815f80516020615cb08339815191528580a37f63bac3565273ab044284225dc704268af420b439d3fdce39b7af872371dee3938380a3600160025580f35b6140b9906144d9565b61040957835f614036565b6140cd906144d9565b6103f857845f613fcd565b6140e1906144d9565b6105d957825f613f4a565b6140f5926152eb565b5f8088613f14565b80929750888092503d831161412b575b6141178183614588565b810103126105895751899590613f0d613f02565b503d61410d565b61413e919293506144d9565b6103e2578890885f613edf565b975091508787813d8111614176575b6141648183614588565b81010312610589578a9651915f613eaa565b503d61415a565b60405162461bcd60e51b815260048101849052601860248201527720b63932b0b23c9030903b30bab63a103837b9b4ba34b7b760411b6044820152606490fd5b50346105895760208060031936011261058957600435906141dc615297565b5f82815260078252604080822054600884529120546001600160a01b0393918416929060ff163384148015614375575b614216915061466e565b815f52600681528360405f205416906142308215156146ab565b7f000000000000000000000000000000000000000000000000000000000000000094851692604051926370a0823160e01b918285523060048601528385602481895afa948515611d00575f95614346575b50813b15610589575f91602483926040519485938492631c4b774b60e01b845260048401525af18015611d0057614333575b50819060246040518096819382523060048301525afa9081156122ac578691614303575b506142e292506146e4565b90816142f2575b83600160025580f35b6142fb926152eb565b5f80806142e9565b905082813d831161432c575b6143198183614588565b81010312610589576142e291515f6142d7565b503d61430f565b61433e9197506144d9565b5f95816142b3565b9094508381813d831161436e575b61435e8183614588565b810103126105895751935f614281565b503d614354565b5080614385575b6142169061420c565b50337f000000000000000000000000000000000000000000000000000000000000000085161461437c565b34610589576020366003190112610589577f5f69f9a50088e24c4b3901d14e89e4dac168abd771d24ef096bb47a7696c2f0060206143ec61441c565b6143f4615240565b600480546001600160a01b0319166001600160a01b03929092169182179055604051908152a1005b600435906001600160a01b038216820361058957565b602435906001600160a01b038216820361058957565b35906001600160a01b038216820361058957565b604091949392606082019560018060801b0316825260208201520152565b9181601f84011215610589578235916001600160401b038311610589576020838186019501011161058957565b359062ffffff8216820361058957565b35908160020b820361058957565b35906001600160801b038216820361058957565b6001600160401b0381116144ec57604052565b634e487b7160e01b5f52604160045260245ffd5b61030081019081106001600160401b038211176144ec57604052565b60a081019081106001600160401b038211176144ec57604052565b60c081019081106001600160401b038211176144ec57604052565b604081019081106001600160401b038211176144ec57604052565b602081019081106001600160401b038211176144ec57604052565b601f909101601f19168101906001600160401b038211908210176144ec57604052565b6001600160401b0381116144ec57601f01601f191660200190565b9291926145d2826145ab565b916145e06040519384614588565b829481845281830111610589578281602093845f960137010152565b9080601f8301121561058957816020614617933591016145c6565b90565b60443590811515820361058957565b8181029291811591840414171561463c57565b634e487b7160e01b5f52601160045260245ffd5b811561465a570490565b634e487b7160e01b5f52601260045260245ffd5b1561467557565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b156146b257565b60405162461bcd60e51b815260206004820152600a602482015269139bdd081cdd185ad95960b21b6044820152606490fd5b9190820391821161463c57565b156146f857565b60405162461bcd60e51b81526020600482015260126024820152712737ba103837b9b4ba34b7b71037bbb732b960711b6044820152606490fd5b6001600160a01b039091168152602081019190915260400190565b5f5b83811061475e5750505f910152565b818101518382015260200161474f565b906020916147878151809281855285808601910161474d565b601f01601f1916010190565b1561479a57565b60405162461bcd60e51b8152602060048201526016602482015275158cd55d1a5b1cc81b9bdd0818dbdb999a59dd5c995960521b6044820152606490fd5b51906001600160a01b038216820361058957565b51908160020b820361058957565b51906001600160801b038216820361058957565b9190826101809103126105895781516001600160601b0381168103610589579161483a602082016147d8565b91614847604083016147d8565b91614854606082016147d8565b91608082015162ffffff81168103610589579161487360a082016147ec565b9161488060c083016147ec565b9161488d60e082016147fa565b9161010082015191610120810151916146176101606148af61014085016147fa565b93016147fa565b90816060910312610589576148ca816147fa565b916040602083015192015190565b9035601e1982360301811215610589570160208101919035906001600160401b03821161058957813603831361058957565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b03918216815291166020820152604081019190915260600190565b3d15614976573d9061495d826145ab565b9161496b6040519384614588565b82523d5f602084013e565b606090565b9060ff801983541691151516179055565b91909160a08060c083019480518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b6040919493926060820195825260208201520152565b96989792949093915f99885f52600760205260018060a01b0360405f20541693600860205260ff60405f20541685331480156151a1575b614a21915061466e565b5f8a8152600660205260409020546001600160a01b031697614a448915156146ab565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611d00575f9161516f575b50893b1561058957604051631c4b774b60e01b8152600481018d90525f81602481838f5af18015611d005761515c575b506040516370a0823160e01b8152306004820152908e6020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115613b335790615128575b614b2692506146e4565b998a156151185760405163133f757160e31b8152600481018d9052958e929190610180886024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9a8b15610a6c578d978599869d6150e4575b50859786998261506b575b505050505083614f66575b505060035460a01c6001600160401b031692600160401b9250604081901b9150801590820483141715611a3157818301809311611a315782614be291614650565b928060401b918183041490151715614f525790614bfe91614650565b93863b15614f4357604051632e1a7d4d60e01b8152600481018a90528b81602481838c5af18015614f4757614f2f575b5098999798614d5b9890606090614c716001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690871661534f565b614ca8846001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690881661539f565b614cde6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908a1661534f565b614d15876001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908b1661539f565b60405190614d2282614537565b8c8252846020830152876040830152838383015283608083015260a0820152604051809b819263219f5d1760e01b83526004830161498c565b0381847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1968715613bc65781998298614f07575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15610a355760405163095ea7b360e01b8152828180614de98f8660048401614732565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610a4d57908391614ef3575b5050803b15610a355781809160248d604051948593849263b6b55f2560e01b845260048401525af18015610a2a57614edf575b505091859391614e87899897614e815f80516020615c908339815191529b614ea699976146e4565b946146e4565b928281614ec5575b50505081614eab57505050604051938493846149ca565b0390a2565b614ebd926001600160a01b03166152eb565b5f8080611811565b614ed7926001600160a01b03166152eb565b5f8082614e8f565b614ee982916144d9565b61020a5780614e59565b614efc906144d9565b610a3557815f614e26565b909750614f2491995060603d606011611a2a57611a158183614588565b99915098965f614d9a565b614f398c916144d9565b614f43575f614c2e565b8a80fd5b6040513d8e823e3d90fd5b634e487b7160e01b8c52601160045260248cfd5b6040516370a0823160e01b81523060048201529495509293919290916020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa938415613b335793615033575b50906150279361501d9260405194614fd88661451c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811687528c1660208701526040860152606085015236916145c6565b6080820152615488565b9050905f8b8180614ba1565b919092506020823d602011615063575b8161505060209383614588565b8101031261058957905191615027614fc1565b3d9150615043565b6150d795995061508361501d94939261271092614629565b0493604051946150928661451c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811687528d1660208701526040860152606085015236916145c6565b9050935f8080808f614b96565b909c506151039199506101803d61018011610b2b57610b0f8183614588565b50505050505050509a92509050989b5f614b8b565b5050505050505050505050509050565b506020823d602011615154575b8161514260209383614588565b8101031261058957614b269151614b1c565b3d9150615135565b615167919e506144d9565b5f9c5f614ac7565b90506020813d602011615199575b8161518a60209383614588565b8101031261058957515f614a97565b3d915061517d565b50806151b1575b614a2190614a17565b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146151a8565b6001600160a01b0391821681529116602082015260029190910b604082015260600190565b91908110156152185760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b03811681036105895790565b5f546001600160a01b0316330361525357565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b60028054146152a65760028055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b615320615325939261531260405194859263a9059cbb60e01b602085015260248401614732565b03601f198101845283614588565b615ae5565b565b9061532090615312615325956040519586936323b872dd60e01b60208601526024850161492a565b60405163095ea7b360e01b60208201526001600160a01b0390921660248301525f60448084019190915282526080820191906001600160401b038311828410176144ec5761532592604052615ae5565b604051636eb1769f60e11b81523060048201526001600160a01b038084166024830152929390926020908490604490829086165afa928315611d00575f93615412575b50820180921161463c576153206153259361531260405194859263095ea7b360e01b602085015260248401614732565b9092506020813d60201161543e575b8161542e60209383614588565b810103126105895751915f6153e2565b3d9150615421565b81601f8201121561058957805161545c816145ab565b9261546a6040519485614588565b8184526020828401011161058957614617916020808501910161474d565b5f915f915f906040810151151580615ad7575b80615ac1575b80615aae575b6154af575050565b9250925060018060a01b03825116916040516370a0823160e01b815280602081600496308883015260249485915afa8015611d005782915f91615a79575b506020848101516040516370a0823160e01b8152308982015293849182906001600160a01b03165afa918215611d00575f92615a45575b50608084018051602001517f0000000000000000000000000000000000000000000000000000000000000000036159be575180518101906040818303126105895760208101516001600160a01b03811603610589576040810151916001600160401b0383116105895761559e926020809201920101615446565b80518101906020818303126105895760208101516001600160401b0381116105895760608183018403126105895760405191606083016001600160401b038111848210176159ac57604052808201602001516001600160401b03811161058957615612906020808701918585010101615446565b835280820160400151936001600160401b0385116105895760208101603f868585010101121561058957818301850160200151946001600160401b03861161599a578560051b906040519661566a6020840189614588565b875260208701602084016040848489890101010111610589576040828787010101905b60408484898901010101821061596157505050505060208301938452016060015160408083019182528751908801519192916156f3917f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03166152eb565b51915190517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561058957604051630d64d59360e21b815260608a820152929091839161574e90606484019061476e565b6003198382030188840152815180825260208201916020808360051b8301019401925f915b83831061592e575050505060448301939093525f925081900381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015611d005761591b575b5082905b84516040516370a0823160e01b815230898201529260209184919082906001600160a01b03165afa9081156103ed5788916158e5575b61580992506146e4565b6020848101516040516370a0823160e01b8152308982015292989294859182906001600160a01b03165afa908115613b3357906158b1575b61584b92506146e4565b92606082015184106158a2575060018060a01b0381511690602060018060a01b0391015116907ffa2dda1cc1b86e41239702756b13effbc1a092b5c57e3ad320fbe4f3b13fe23560408051878152866020820152a3565b604051630d4205a160e11b8152fd5b506020823d6020116158dd575b816158cb60209383614588565b810103126105895761584b9151615841565b3d91506158be565b90506020823d602011615913575b8161590060209383614588565b81010312610589576158099151906157ff565b3d91506158f3565b6159269197506144d9565b5f95826157c5565b9193969550919360208061594e600193601f198682030187528a5161476e565b9801930193019092879596949293615773565b8151906001600160401b038211610589576020809161598d8960408096898e878e019401010101615446565b815201920191905061568d565b8860418d634e487b7160e01b5f52525ffd5b8760418c634e487b7160e01b5f52525ffd5b845160408601517f0000000000000000000000000000000000000000000000000000000000000000925f9283926159ff9186906001600160a01b031661539f565b5160208151910182855af1615a1261494c565b5015615a34578451849291615a2f916001600160a01b031661534f565b6157c9565b60405163081ceff360e41b81528790fd5b9091506020813d602011615a71575b81615a6160209383614588565b810103126105895751905f615524565b3d9150615a54565b9150506020813d602011615aa6575b81615a9560209383614588565b81010312610589578190515f6154ed565b3d9150615a88565b5080516001600160a01b031615156154a7565b5060208101516001600160a01b031615156154a1565b50608081015151151561549b565b604051615b42916001600160a01b0316615afe82614552565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1615b3c61494c565b91615bd2565b8051828115918215615bb2575b5050905015615b5b5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b83809293500103126105895781015180151581036105895780825f615b4f565b91929015615c345750815115615be6575090565b3b15615bef5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615c475750805190602001fd5b60405162461bcd60e51b815260206004820152908190615c6b90602483019061476e565b0390fdfe627009b4f6918ee0f41065d4adffdb5142a9ef54c66cc350bb8396c1c82a409c7bc20d87c86242030e635d45b4dc01d4a4c6e3379f3cda5e62d68716f5d5ca12dd8df9cdfbfa0633e022e142f0da49c4cb7f22a3cf1c8a632425282652aefeff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000827922686190790b37229fd06084350e74485b72000000000000000000000000940181a94a35a4569e4529a3cdfb74e38fd9863100000000000000000000000093db99aeb08e44d21f4eb2af247b9dc6f1eccd260000000000000000000000006ff5693b99212da76ad316178a184ab56d299b430000000000000000000000000000000000001ff3684f28c67538d4d072c227340000000000000000000000003895e33b91f19b279d30b1436640c87e300d2dac