26 txs
48 calls
constructor
constructor(address utilsAdr)
functions
contractBalance
viewfunction contractBalance(address token) view returns (uint256 balance)
controller
viewfunction controller() view returns (address)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
factory
viewfunction factory() view returns (address)
funder
viewfunction funder() view returns (address)
getController
viewfunction getController() view returns (address _controller)
getFunder
viewfunction getFunder() view returns (address _funder)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
getTotalValueEth12
viewfunction getTotalValueEth12() view returns (uint128 valueEth12)
getTotalValueUsd12
viewfunction getTotalValueUsd12() view returns (uint128 valueUsd12)
getUsd12ValueIn
viewfunction getUsd12ValueIn(address token) view returns (uint128 valueUsd12)
indexFromPositionId
viewfunction indexFromPositionId(uint256) view returns (uint8)
indexFromTokenAddress
viewfunction indexFromTokenAddress(address) view returns (uint8)
isTokenApprovedForSwap
viewfunction isTokenApprovedForSwap(address) view returns (bool)
manager
viewfunction manager() view returns (address)
nLiquidityPositions
viewfunction nLiquidityPositions() view returns (uint8)
nTokensHeld
viewfunction nTokensHeld() view returns (uint8)
numLiquidityPositionsByToken
viewfunction numLiquidityPositionsByToken(address) view returns (uint16)
owner
viewfunction owner() view returns (address)
positions
viewfunction positions(uint256) view returns (address pool, uint256 lastFeeX128, uint256 tokenId, address base, address quote)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
swapRouter
viewfunction swapRouter() view returns (address)
tokensHeld
viewfunction tokensHeld(uint256) view returns (address)
utils
viewfunction utils() view returns (address)
validEmergencyTokens
viewfunction validEmergencyTokens(address) view returns (bool)
addEmergencyTokens
nonpayablefunction addEmergencyTokens(address[] tokens)
closeLiquidity
nonpayablefunction closeLiquidity(uint256 tokenId)
collectFees
nonpayablefunction collectFees(uint256 tokenId)
createV3Position
nonpayablefunction createV3Position(address pool, address base, address quote, uint80 lowPrice12, uint80 highPrice12, uint256 toAdd) returns (uint256 tokenId, uint8 idx)
depositEth
payablefunction depositEth() payable
depositToken
nonpayablefunction depositToken(address token, uint256 amount)
destroyPosition
nonpayablefunction destroyPosition(uint256 tokenId)
emergencyCircuitBreaker
nonpayablefunction emergencyCircuitBreaker(address storeOfValueToken)
fillLiquidity
nonpayablefunction fillLiquidity(uint256 positionId)
lockEmergencyTokens
nonpayablefunction lockEmergencyTokens()
obtainTokens
nonpayablefunction obtainTokens(address token0, address token1, uint256 amount0, uint256 amount1)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address token)
setController
nonpayablefunction setController(address newController)
setFunder
nonpayablefunction setFunder(address newFunder)
setUtils
nonpayablefunction setUtils(address utilsAdr)
swapTokens
nonpayablefunction swapTokens(address from, address to, uint256 maxIn, uint256 maxOut, uint24 slippageE6) returns (uint256 amountIn, uint256 amountOut)
swapTokensInto
nonpayablefunction swapTokensInto(address tokenFrom, address tokenTo, uint256 maxIn, uint256 maxOut) returns (uint256 tokensIn, uint256 tokensOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawEth
nonpayablefunction withdrawEth(address destination, uint256 amount)
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 tokenId)
withdrawToken
nonpayablefunction withdrawToken(address token, address destination, uint256 amount)
events
ControllerSet
event ControllerSet(address newController, address oldController)
Deposited
event Deposited(address token, uint256 amount)
EmergencyCircuitBreakerFlipped
event EmergencyCircuitBreakerFlipped(address storeOfValueToken)
FunderSet
event FunderSet(address newController, address oldController)
LiquidityFeesCollected
event LiquidityFeesCollected(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
LiquidityModified
event LiquidityModified(uint256 poolPosition, address base, address quote, int128 liquidityChange)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PositionBurned
event PositionBurned(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
PositionMinted
event PositionMinted(uint256 poolPosition, address base, address quote, uint80 minPrice, uint80 maxPrice, uint256 toAdd)
TokensSwapped
event TokensSwapped(address from, address to, uint256 fromAmt, uint256 toAmt)
Withdrawn
event Withdrawn(address token, uint256 amount)
errors
No errors.
creation bytecode
0x61010060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a0527388e6a0c2ddd26feeb64f039a2c41296fcb3f564060c05273c36442b4a4522e871399cd717abdd847ab11fe8860e052600e805460ff199081169091556038805482169055603b8054909116905534801561008e575f80fd5b506040516165883803806165888339810160408190526100ad916104d0565b6100b633610331565b6080516001600160a01b039081165f908152600160208190526040808320805460ff19908116841790915560a05190941680845281842080548616841790559280527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054909416909117909255905163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015610176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019a91906104fd565b5060a05160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156101ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021191906104fd565b5060805160405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af1158015610274573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029891906104fd565b5060805160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156102eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f91906104fd565b5061031933610380565b610322336103e7565b61032b81610447565b5061051c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610388610471565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91015b60405180910390a15050565b6103ef610471565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691016103db565b61044f610471565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b5f602082840312156104e0575f80fd5b81516001600160a01b03811681146104f6575f80fd5b9392505050565b5f6020828403121561050d575f80fd5b815180151581146104f6575f80fd5b60805160a05160c05160e051615f326106565f395f818161059401528181611373015281816116be015281816119bf01528181611c2601528181611d6b015281816124e001528181612a880152818161376f0152818161409e01526153a301525f50505f8181610d1b01528181610d6701528181610de001528181610e6c01528181610f9701528181611034015281816110830152818161122201528181611f69015281816122cf015281816127b50152818161286a0152818161293601528181612cbd01528181612d5f0152818161363201528181613c9901528181613cc80152818161436d01526143c901525f8181611fad01528181612379015281816127f5015281816128400152818161357d01528181613cf201528181613dcb015281816141500152818161425901526142b50152615f325ff3fe6080604052600436106102e5575f3560e01c8063677342ce11610181578063b17acdcd116100d4578063c4b19b5411610083578063f2fde38b11610060578063f2fde38b14610993578063f60b36e3146109b2578063f77c4791146109d157005b8063c4b19b5414610919578063c53b770214610938578063df2a558b1461096557005b8063bf0e622b116100b1578063bf0e622b14610889578063c31c9c07146108cb578063c45a0155146108f257005b8063b17acdcd14610832578063b3a5794314610851578063bc3291981461087057005b80638da5cb5b116101305780639a7fe3a11161010d5780639a7fe3a1146107d15780639ba69249146107f0578063a9e88b8f1461080457005b80638da5cb5b1461074157806392eefe9b1461075d57806399fbab881461077c57005b8063715018a61161015e578063715018a6146106f157806381720479146107055780638abb98451461072457005b8063677342ce1461067d578063699535011461069c5780636a0f27c2146106bb57005b8063329aa41411610239578063481c6a75116101e85780634a2539c3116101c55780634a2539c3146106135780635a29638d1461063257806363011d1a1461065157005b8063481c6a7514610583578063495915d3146105b657806349c69fd8146105d557005b806339040ed11161021657806339040ed11461052257806342d9843e1461054d578063439370b11461057b57005b8063329aa414146104c557806332c4171d146104e4578063338b5dea1461050357005b8063145a6ae0116102955780631b9a91a4116102725780631b9a91a41461046a5780631fba9eda146104895780633018205f146104a857005b8063145a6ae0146103da578063150b7a02146103f957806319cc33571461045657005b806308092e9a116102c357806308092e9a146103685780630a861f2a1461039c5780630acc8cd1146103bb57005b8062ae3bf8146102ee57806301e336671461030d578063041ae8801461032c57005b366102ec57005b005b3480156102f9575f80fd5b506102ec610308366004615455565b6109f0565b348015610318575f80fd5b506102ec610327366004615470565b610b3c565b348015610337575f80fd5b5060035461034b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610373575f80fd5b506103876103823660046154be565b610cb0565b6040805192835260208301919091520161035f565b3480156103a7575f80fd5b506102ec6103b6366004615519565b6112ef565b3480156103c6575f80fd5b506102ec6103d5366004615455565b6115d2565b3480156103e5575f80fd5b506102ec6103f4366004615519565b61163a565b348015610404575f80fd5b5061043d610413366004615530565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040516001600160e01b0319909116815260200161035f565b348015610461575f80fd5b506102ec611add565b348015610475575f80fd5b506102ec6104843660046155c9565b611af4565b348015610494575f80fd5b5061034b6104a336600461560a565b611bb1565b3480156104b3575f80fd5b506002546001600160a01b031661034b565b3480156104d0575f80fd5b506102ec6104df366004615519565b611bf5565b3480156104ef575f80fd5b506102ec6104fe366004615645565b611e6e565b34801561050e575f80fd5b506102ec61051d3660046155c9565b61203b565b34801561052d575f80fd5b50600e5461053b9060ff1681565b60405160ff909116815260200161035f565b348015610558575f80fd5b5061053b610567366004615519565b60396020525f908152604090205460ff1681565b6102ec6121ab565b34801561058e575f80fd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c1575f80fd5b506102ec6105d0366004615688565b6121e5565b3480156105e0575f80fd5b506106036105ef366004615455565b603a6020525f908152604090205460ff1681565b604051901515815260200161035f565b34801561061e575f80fd5b506102ec61062d366004615519565b6123fb565b34801561063d575f80fd5b5060045461034b906001600160a01b031681565b34801561065c575f80fd5b5061066561279c565b6040516001600160801b03909116815260200161035f565b348015610688575f80fd5b50610665610697366004615519565b612df8565b3480156106a7575f80fd5b506102ec6106b6366004615455565b612f79565b3480156106c6575f80fd5b506106da6106d53660046156f9565b612fa3565b6040805192835260ff90911660208301520161035f565b3480156106fc575f80fd5b506102ec61347a565b348015610710575f80fd5b5061038761071f366004615645565b61348d565b34801561072f575f80fd5b506003546001600160a01b031661034b565b34801561074c575f80fd5b505f546001600160a01b031661034b565b348015610768575f80fd5b506102ec610777366004615455565b6134ab565b348015610787575f80fd5b5061079b610796366004615519565b61350a565b604080516001600160a01b039687168152602081019590955284019290925283166060830152909116608082015260a00161035f565b3480156107dc575f80fd5b506106656107eb366004615455565b61354d565b3480156107fb575f80fd5b506106656135fe565b34801561080f575f80fd5b5061060361081e366004615455565b60016020525f908152604090205460ff1681565b34801561083d575f80fd5b506102ec61084c366004615519565b6136da565b34801561085c575f80fd5b5061034b61086b36600461576e565b61397c565b34801561087b575f80fd5b5060385461053b9060ff1681565b348015610894575f80fd5b506108b86108a3366004615455565b60056020525f908152604090205461ffff1681565b60405161ffff909116815260200161035f565b3480156108d6575f80fd5b5061034b73e592427a0aece92de3edee1f18e0157c0586156481565b3480156108fd575f80fd5b5061034b731f98431c8ad98523631ae4a59f267346ea31f98481565b348015610924575f80fd5b5061034b610933366004615519565b6139bd565b348015610943575f80fd5b50610957610952366004615455565b6139dc565b60405190815260200161035f565b348015610970575f80fd5b5061053b61097f366004615455565b600f6020525f908152604090205460ff1681565b34801561099e575f80fd5b506102ec6109ad366004615455565b613a77565b3480156109bd575f80fd5b506102ec6109cc366004615455565b613b07565b3480156109dc575f80fd5b5060025461034b906001600160a01b031681565b6109f8613d70565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681101580610a515750816001600160a01b031660068260ff1660088110610a4357610a436157b6565b01546001600160a01b031614155b610aa25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74202772657363756527206465706f73697473000000000000000060448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb610ac25f546001600160a01b031690565b610acb856139dc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3791906157d9565b505050565b8015610b37576003546001600160a01b03163314610b8b5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1491906157d9565b610c605760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a99565b610c6983613dc9565b604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505050565b6002545f9081906001600160a01b0316331480610ccc57503330145b610d075760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6001600160a01b038716158015610d4f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b15610dde57838510610d615783610d63565b845b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610dbe575f80fd5b505af1158015610dd0573d5f803e3d5ffd5b508594506112e59350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316148015610e2657506001600160a01b038616155b15610ed457838510610e385783610e3a565b845b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610eb5575f80fd5b505af1158015610ec7573d5f803e3d5ffd5b508493506112e592505050565b600480546040517f64aa79a30000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116938201939093528883166024820152604481018890526064810187905262ffffff861660848201525f92839216906364aa79a39060a401606060405180830381865afa158015610f5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7f91906157f2565b90955090925090506001600160a01b038916611006577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015610fee575f80fd5b505af1158015611000573d5f803e3d5ffd5b50505050505b5f6040518061010001604052805f6001600160a01b03168c6001600160a01b031614611032578b611054565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031681526020015f6001600160a01b03168b6001600160a01b031614611081578a6110a3565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111119190615831565b62ffffff168152602001306001600160a01b031681526020014281526020018681526020018381526020015f6001600160a01b0316815250905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf389826040518263ffffffff1660e01b815260040161118b919061584c565b6020604051808303815f875af11580156111a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111cb91906158dd565b93506001600160a01b038a16156111e5576111e58a613dc9565b6001600160a01b038916611286576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561126b575f80fd5b505af115801561127d573d5f803e3d5ffd5b5050505061128f565b61128f89613f9d565b604080516001600160a01b03808d1682528b166020820152908101869052606081018590527f25f1d03755df23c30e25db2dbd3891e31ce084bdfbfc46f9fe5e446ee5f9b2d49060800160405180910390a15050505b9550959350505050565b6003546001600160a01b031633146113385760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b1580156113bc575f80fd5b505af11580156113ce573d5f803e3d5ffd5b5050505f8281526039602052604081205460ff169150601082600881106113f7576113f76157b6565b60385460059190910291909101915060ff90811690831610801561141e5750828160020154145b15610b375760038101546001600160a01b03165f908152600560205260408120805461ffff169161144e83615908565b82546101009290920a61ffff81810219909316918316021790915560048301546001600160a01b03165f9081526005602052604081208054909216925061149483615908565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f6114c483615924565b82546101009290920a60ff81810219909316918316021790915560385416159050610b375760385460109060ff1660088110611502576115026157b6565b6005020160108360ff166008811061151c5761151c6157b6565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558160395f601060ff8416600881106115a1576115a16157b6565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff160217905550505050565b6115da613d70565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691015b60405180910390a15050565b6002546001600160a01b031633146116835760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b61168c816136da565b5f8181526039602052604081205460ff1690601082600881106116b1576116b16157b6565b6005020190505f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88896040518263ffffffff1660e01b815260040161170a91815260200190565b61018060405180830381865afa158015611726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174a9190615968565b50505050975097509750509650965050505f865f015f9054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156117ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d19190615a63565b50505050505090505f6117e3876139dc565b905061180e6117f1876139dc565b600160c01b6118096001600160a01b03861680615ae6565b6144d2565b6118189082615afd565b90505f6118366118278761457c565b6118308761457c565b846149b8565b6004549091505f9081906001600160a01b031663c72e160b866118588b61457c565b6118618b61457c565b60646118776001600160801b038a166062615ae6565b6118819190615b24565b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0390911660648201526084016040805180830381865afa1580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119059190615b37565b915091506119158a8a8484611e6e565b5f6040518060c001604052808f81526020016119308d6139dc565b815260200161193e8c6139dc565b81525f602080830182905260408084018390524260609485015280517f219f5d170000000000000000000000000000000000000000000000000000000081528551600482015291850151602483015284015160448201529183015160648301526080830151608483015260a083015160a48301529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063219f5d179060c4016060604051808303815f875af1158015611a05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a299190615b59565b8095508196508293505050507f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c8f8e6003015f9054906101000a90046001600160a01b03168f6004015f9054906101000a90046001600160a01b03168b85611a919190615b74565b604051611ac494939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1505050505050505050505050505050565b611ae5613d70565b603b805460ff19166001179055565b8015611bad576003546001600160a01b03163314611b435760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611b76573d5f803e3d5ffd5b50604080515f8152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910161162e565b5050565b5f80611bd78369ffffffffffffffffffff16600160c01b86600c0160ff16600a0a6144d2565b9050611be281612df8565b6001600160801b03169150505b92915050565b6040517f99fbab88000000000000000000000000000000000000000000000000000000008152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611c74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c989190615968565b5050505f8b815260396020526040812054929a5060ff90921698509096506010955087945050600884109250611cd391505057611cd36157b6565b6005020190506001600160801b03831615611e68576040805160a0810182528581526001600160801b03858116602083019081525f83850181815260608501918252426080860190815295517f0c49ccbe0000000000000000000000000000000000000000000000000000000081528551600482015292519093166024830152915160448201529051606482015291516084830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c49ccbe9060a40160408051808303815f875af1158015611db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ddc9190615b37565b5050600382015460048301547f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c9187916001600160a01b039182169116611e2288615b93565b604051611e5594939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1611e66856136da565b505b50505050565b5f611e78856139dc565b90505f611e84856139dc565b9050838210158015611e965750828110155b15611ea2575050611e68565b5f805f848710611eb457848703611eb6565b5f5b9150838610611ec757838603611ec9565b5f5b90508685108015611ed957508584115b15611f1b5785840392505f611efe898b86620f4240620f7cd888025b04613a98610cb0565b91505080831115611f1157808303611f13565b5f5b925050611f62565b8584108015611f2957508685115b15611f625786850392505f611f498a8a86620f4240620f7cd88702611ef5565b91505080821115611f5c57808203611f5e565b5f5b9150505b611f8f89897f00000000000000000000000000000000000000000000000000000000000000008585614a21565b9092509050611fa189895f8585614a21565b9092509050611fd389897f00000000000000000000000000000000000000000000000000000000000000008585614a21565b909250905081158015611fe4575080155b6120305760405162461bcd60e51b815260206004820152600b60248201527f556e64657266756e6465640000000000000000000000000000000000000000006044820152606401610a99565b505050505050505050565b8015611bad576003546001600160a01b0316331461208a5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af11580156120f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211791906157d9565b6121635760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a99565b61216c82613f9d565b604080516001600160a01b0384168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910161162e565b604080515f81523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b6121ed613d70565b603b5460ff16156122405760405162461bcd60e51b815260206004820152600660248201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152606401610a99565b5f6122496135fe565b600802662386f26fc100000190505f5b60ff8116831115611e68575f84848360ff1681811061227a5761227a6157b6565b905060200201602081019061228f9190615455565b6001600160a01b038181165f81815260016020819052604091829020805460ff19169091179055600480549151633d7e854360e11b8152908101929092527f0000000000000000000000000000000000000000000000000000000000000000831660248301526001600160801b0387166044830152929350911690637afd0a86906064016020604051808303815f875af115801561232f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123539190615bcf565b5060048054604051633d7e854360e11b81526001600160a01b03848116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201525f6044820152911690637afd0a86906064016020604051808303815f875af11580156123cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123f19190615bcf565b5050600101612259565b6002546001600160a01b031633146124445760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b5f8181526039602052604081205460ff169060108260088110612469576124696157b6565b60050201600381015460048201549192506001600160a01b0390811691165f612491836139dc565b90505f61249d836139dc565b90506124a887611bf5565b6124b1876136da565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b158015612529575f80fd5b505af115801561253b573d5f803e3d5ffd5b505050505f8261254a866139dc565b6125549190615bea565b90505f82612561866139dc565b61256b9190615bea565b6001600160a01b0387165f908152600560205260408120805492935061ffff909216919061259883615908565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b0387165f908152600560205260408120805490921692506125da83615908565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f61260a83615924565b82546101009290920a60ff818102199093169183160217909155603854161590506127145760385460109060ff1660088110612648576126486157b6565b6005020160108960ff1660088110612662576126626157b6565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558760395f601060ff8416600881106126e7576126e76157b6565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505b6103e88210156127275761272786613dc9565b6103e881101561273a5761273a85613dc9565b604080518a81526001600160a01b038881166020830152871681830152606081018490526080810183905290517f5501b833962ceaf131361ff8d59683c382ab00f523035d0fc4c2ffc19bef3a459181900360a00190a1505050505050505050565b5f6127aa620f424047615b24565b9050620f42406127d97f00000000000000000000000000000000000000000000000000000000000000006139dc565b6127e39190615b24565b6127ed9082615bfd565b90505f6128197f00000000000000000000000000000000000000000000000000000000000000006139dc565b905061c3508111156128ef57600480546040516332d2f46960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093527f000000000000000000000000000000000000000000000000000000000000000083166024820152604481018490529116906365a5e8d290606401602060405180830381865afa1580156128be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e29190615c1c565b6128ec9083615bfd565b91505b5f5b600e5460ff9081169082161015612a6d576004546001600160a01b03166365a5e8d2600660ff841660088110612929576129296157b6565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000600660ff86166008811061296b5761296b6157b6565b01546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156129c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ed91906158dd565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa158015612a3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a619190615c1c565b909201916001016128f1565b505f5b60385460ff9081169082161015612df3575f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab8860108860ff1660088110612acb57612acb6157b6565b60050201600201546040518263ffffffff1660e01b8152600401612af191815260200190565b61018060405180830381865afa158015612b0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b319190615968565b50505050975097509750509650965050505f60108760ff1660088110612b5957612b596157b6565b6005020154604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691633850c7bd9160048082019260e0929091908290030181865afa158015612bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612be09190615a63565b50506004549495505f948594506001600160a01b0316925063c72e160b9150859050612c0b8961457c565b612c148961457c565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03871660648201526084016040805180830381865afa158015612c74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c989190615b37565b600480546040516332d2f46960e11b81526001600160a01b038d8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905293955091935016906365a5e8d290606401602060405180830381865afa158015612d16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d3a9190615c1c565b600480546040516332d2f46960e11b81526001600160a01b038b8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905292909d019c16906365a5e8d290606401602060405180830381865afa158015612db7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddb9190615c1c565b909a0199505060019096019550612a70945050505050565b505090565b5f815f03612e0757505f919050565b8160017001000000000000000000000000000000008210612e2d5760809190911c9060401b5b680100000000000000008210612e485760409190911c9060201b5b6401000000008210612e5f5760209190911c9060101b5b620100008210612e745760109190911c9060081b5b6101008210612e885760089190911c9060041b5b60108210612e9b5760049190911c9060021b5b60088210612ea75760011b5b6001818581612eb857612eb8615b10565b048201901c90506001818581612ed057612ed0615b10565b048201901c90506001818581612ee857612ee8615b10565b048201901c90506001818581612f0057612f00615b10565b048201901c90506001818581612f1857612f18615b10565b048201901c90506001818581612f3057612f30615b10565b048201901c90506001818581612f4857612f48615b10565b0491909101901c5f612f5a8286615b24565b9050808210612f695780612f6b565b815b95945050505050565b919050565b612f81613d70565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002545f9081906001600160a01b03163314612ff05760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b603854600860ff909116106130475760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a99565b856001600160a01b0316876001600160a01b0316036130a85760405162461bcd60e51b815260206004820152600a60248201527f53616d6520746f6b656e000000000000000000000000000000000000000000006044820152606401610a99565b5f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131099190615c35565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131699190615c35565b6131739190615c4e565b90505f613185898961086b858b611bb1565b90505f6131978a8a61086b868b611bb1565b90505f8b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156131d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fa9190615a63565b5050505050509050816001600160a01b0316836001600160a01b03161115613220579091905b5f61322c84848a6149b8565b90505f61323e8e8e8e86898988614b20565b6001600160a01b038f165f9081526005602052604081208054939b5091935061ffff9092169161326d83615c6e565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b038e165f908152600560205260408120805490921692506132af83615c6e565b91906101000a81548161ffff021916908361ffff160217905550506040518060a001604052808f6001600160a01b031681526020018281526020018981526020018e6001600160a01b031681526020018d6001600160a01b0316815250601060385f9054906101000a900460ff1660ff1660088110613330576133306157b6565b82516005919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401556040808601516002850155606086015160038501805485169187169190911790556080909501516004909301805490921692909316919091179055603880545f8c81526039909352928220805460ff94851660ff19909116179055805490921698508891906133d183615c8e565b91906101000a81548160ff021916908360ff160217905550507f29cd472535c058e9f744cc9cead6f8c38cbe5ea230674d825060f275884bdd72888e8e8e8e8e604051613461969594939291909586526001600160a01b03948516602087015292909316604085015269ffffffffffffffffffff908116606085015291909116608083015260a082015260c00190565b60405180910390a1505050505050965096945050505050565b613482613d70565b61348b5f614d56565b565b5f8061349e86868686613a98610cb0565b9150915094509492505050565b6134b3613d70565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a910161162e565b60108160088110613519575f80fd5b6005020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092908116911685565b5f80613558836139dc565b600480546040516332d2f46960e11b81526001600160a01b03878116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810184905292935016906365a5e8d290606401602060405180830381865afa1580156135d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135f79190615c1c565b9392505050565b600480546040517fea4bc51c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093525f9264e8d4a5100092169063ea4bc51c90602401602060405180830381865afa158015613689573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ad9190615ca3565b69ffffffffffffffffffff166136c161279c565b6136cb9190615cbe565b6136d59190615ce0565b905090565b5f818152603960209081526040808320548151608081018352858152309381019384526001600160801b038184018181526060830182815294517ffc6f78650000000000000000000000000000000000000000000000000000000081528351600482015295516001600160a01b039081166024880152905182166044870152935116606485015260ff909116939092909182917f00000000000000000000000000000000000000000000000000000000000000009091169063fc6f78659060840160408051808303815f875af11580156137b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137da9190615b37565b915091505f60108560ff16600881106137f5576137f56157b6565b600502018054600482015460038301549293506001600160a01b03918216925f9291821691161061388557816001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388091906158dd565b6138e5565b816001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138e591906158dd565b60018401819055600484015460038501549192506001600160a01b0390811691161115613910579293925b60038301546004840154604080518b81526001600160a01b03938416602082015292909116828201526060820187905260808201869052517ff75febe5036272e29c10c008070a13657798560aaa45a46b302b112d865ff1f29181900360a00190a15050505050505050565b5f826001600160a01b0316846001600160a01b0316101561399e5750806135f7565b6139b56001600160a01b038316600160c01b615b24565b949350505050565b600681600881106139cc575f80fd5b01546001600160a01b0316905081565b5f6001600160a01b03821615613a70576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a6b91906158dd565b611bef565b4792915050565b613a7f613d70565b6001600160a01b038116613afb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a99565b613b0481614d56565b50565b6002546001600160a01b0316331480613b2957505f546001600160a01b031633145b613b755760405162461bcd60e51b815260206004820152600d60248201527f4163636573732064656e696564000000000000000000000000000000000000006044820152606401610a99565b6001600160a01b0381165f9081526001602052604090205460ff16613bdc5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610a99565b60385460ff165b60ff811615613c5f576040517f4a2539c300000000000000000000000000000000000000000000000000000000815260ff5f199290920191821660048201523090634a2539c3906024015f604051808303815f87803b158015613c44575f80fd5b505af1158015613c56573d5f803e3d5ffd5b50505050613be3565b50600e5460ff165b60ff811615613cc2575f1901613cbd600660ff831660088110613c8c57613c8c6157b6565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614da5565b613c67565b50613ced7f000000000000000000000000000000000000000000000000000000000000000082614da5565b613d177f000000000000000000000000000000000000000000000000000000000000000082614da5565b613d215f82614da5565b600280546001600160a01b03191690556040516001600160a01b03821681527f2cc79b200fc7fdf7af6be005fc77813bfacedb82066816356eed5b7df46194709060200160405180910390a150565b5f546001600160a01b0316331461348b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a99565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161480613e1057506001600160a01b038116155b15613e185750565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681108015613e705750816001600160a01b031660068260ff1660088110613e6357613e636157b6565b01546001600160a01b0316145b8015613e8457506064613e82836139dc565b105b8015613ea957506001600160a01b0382165f9081526005602052604090205461ffff16155b15611bad57600e805460ff16905f613ec083615924565b82546101009290920a60ff818102199093169183160217909155600e54161580159150613ef55750600e5460ff828116911614155b15611bad57600e5460069060ff1660088110613f1357613f136157b6565b01546001600160a01b0316600660ff831660088110613f3457613f346157b6565b0180546001600160a01b0319166001600160a01b039290921691909117905580600f5f600660ff841660088110613f6d57613f6d6157b6565b01546001600160a01b0316815260208101919091526040015f20805460ff191660ff929092169190911790555050565b6001600160a01b03811615801590613fcd57506001600160a01b0381165f908152603a602052604090205460ff16155b1561413b576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015614049573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061406d91906157d9565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f19602483015282169063095ea7b3906044016020604051808303815f875af11580156140f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061411791906157d9565b506001600160a01b0381165f908152603a60205260409020805460ff191660011790555b6001600160a01b0381161580159061418557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15613b04576001600160a01b0381165f818152600f602052604090205460069060ff16600881106141b8576141b86157b6565b01546001600160a01b03161415806141f05750600e546001600160a01b0382165f908152600f602052604090205460ff918216911610155b15613b0457600e54600860ff9091161061424c5760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a99565b5f6142556135fe565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461436b5760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af1925050508015614330575060408051601f3d908101601f1916820190925261432d91810190615bcf565b60015b614369573d80801561435d576040519150601f19603f3d011682016040523d82523d5f602084013e614362565b606091505b505061436b565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461444c5760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af1158015614426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061444a9190615bcf565b505b600e54829060069060ff1660088110614467576144676157b6565b0180546001600160a01b039283166001600160a01b0319909116179055600e80549184165f908152600f60205260408120805460ff191660ff9485161790558154909216916144b583615c8e565b91906101000a81548160ff021916908360ff160217905550505050565b5f80805f19858709858702925082811083820303915050805f03614506575f84116144fb575f80fd5b5082900490506135f7565b808411614511575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f805f8360020b12614591578260020b61459e565b8260020b61459e90615d0d565b90506145ad620d89e719615d27565b62ffffff168111156146015760405162461bcd60e51b815260206004820152600160248201527f54000000000000000000000000000000000000000000000000000000000000006044820152606401610a99565b5f816001165f0361462357700100000000000000000000000000000000614635565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561467457608061466f826ffff97272373d413259a46990580e213a615ae6565b901c90505b600482161561469e576080614699826ffff2e50f5f656932ef12357cf3c7fdcc615ae6565b901c90505b60088216156146c85760806146c3826fffe5caca7e10e4e61c3624eaa0941cd0615ae6565b901c90505b60108216156146f25760806146ed826fffcb9843d60f6159c9db58835c926644615ae6565b901c90505b602082161561471c576080614717826fff973b41fa98c081472e6896dfb254c0615ae6565b901c90505b6040821615614746576080614741826fff2ea16466c96a3843ec78b326b52861615ae6565b901c90505b608082161561477057608061476b826ffe5dee046a99a2a811c461f1969c3053615ae6565b901c90505b61010082161561479b576080614796826ffcbe86c7900a88aedcffc83b479aa3a4615ae6565b901c90505b6102008216156147c65760806147c1826ff987a7253ac413176f2b074cf7815e54615ae6565b901c90505b6104008216156147f15760806147ec826ff3392b0822b70005940c7a398e4b70f3615ae6565b901c90505b61080082161561481c576080614817826fe7159475a2c29b7443b29c7fa6e889d9615ae6565b901c90505b611000821615614847576080614842826fd097f3bdfd2022b8845ad8f792aa5825615ae6565b901c90505b61200082161561487257608061486d826fa9f746462d870fdf8a65dc1f90e061e5615ae6565b901c90505b61400082161561489d576080614898826f70d869a156d2a1b890bb3df62baf32f7615ae6565b901c90505b6180008216156148c85760806148c3826f31be135f97d08fd981231505542fcfa6615ae6565b901c90505b620100008216156148f45760806148ef826f09aa508b5b7a84e1c677de54f3e99bc9615ae6565b901c90505b6202000082161561491f57608061491a826e5d6af8dedb81196699c329225ee604615ae6565b901c90505b62040000821615614949576080614944826d2216e584f5fa1ea926041bedfe98615ae6565b901c90505b6208000082161561497157608061496c826b048a170391f7dc42444e8fa2615ae6565b901c90505b5f8460020b131561498a57614987815f19615b24565b90505b61499964010000000082615d3f565b156149a55760016149a7565b5f5b6139b59060ff16602083901c615afd565b5f826001600160a01b0316846001600160a01b031611156149d7579192915b5f614a02856001600160a01b0316856001600160a01b03166c010000000000000000000000006144d2565b9050612f6b8382614a138888615d52565b6001600160a01b03166144d2565b5f80846001600160a01b0316876001600160a01b031614158015614a575750846001600160a01b0316866001600160a01b031614155b15614b14575f614a66866139dc565b9050620f42408110158015614a7a57505f85115b15614aca575f80614aaa888b85620f4240614a988c620f7cd8615ae6565b614aa29190615b24565b613a98610cb0565b91509150818303925086811015614ac357808703614ac5565b5f5b965050505b620f42408110158015614adc57505f84115b15614b12575f614af9878984620f4240614a988a620f7cd8615ae6565b91505084811015614b0c57808503614b0e565b5f5b9450505b505b50919590945092505050565b5f805f896001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b839190615d71565b62ffffff1690506018818260020b614b9a89614e8f565b60020b81614baa57614baa615b10565b050262ffffff1668ffffffffffffffffff16901b811790506030818260020b614bd288614e8f565b60020b81614be257614be2615b10565b050262ffffff1668ffffffffffffffffff16901b81179050614c6789898987858f6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015614c3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c629190615831565b6151ed565b9250876001600160a01b0316896001600160a01b031610614ce757896001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa158015614cbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ce291906158dd565b614d47565b896001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d4791906158dd565b91505097509795505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f614daf836139dc565b9050816001600160a01b0316836001600160a01b031614610b37576040517f08092e9a0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604481018290525f196064820152620124f8608482015230906308092e9a9060a40160408051808303815f875af1925050508015614e62575060408051601f3d908101601f19168201909252614e5f91810190615b37565b60015b611e66573d808015611e66576040519150601f19603f3d011682016040523d82523d5f602084013e611e66565b5f6401000276a36001600160a01b03831610801590614eca575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b614f165760405162461bcd60e51b815260206004820152600160248201527f52000000000000000000000000000000000000000000000000000000000000006044820152606401610a99565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110614fbe57614fb4607f82615bea565b83901c9150614fcf565b614fc981607f615bea565b83901b91505b5f6040614fdd608084615d8a565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c8561515f9190615da9565b90505f608061517e6f028f6481ab7f045a5af012a19d003aaa84615d8a565b901d90505f608061519f846fdb2df09e81959a81455e260799a0632f615dd8565b901d90508060020b8260020b146151de57886001600160a01b03166151c38261457c565b6001600160a01b031611156151d857816151e0565b806151e0565b815b9998505050505050505050565b5f80866001600160a01b0316886001600160a01b03161161520e5787615210565b865b90505f876001600160a01b0316896001600160a01b0316116152325787615234565b885b6004549091505f9081906001600160a01b031663c72e160b8a61526265ffffffffffff60188c901c1661457c565b61527a60308c68ffffffffffffffffff16901c61457c565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b038b1660648201526084016040805180830381865afa1580156152da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906152fe9190615b37565b9150915061530e84848484611e6e565b5f604051806101600160405280866001600160a01b03168152602001856001600160a01b031681526020018862ffffff16815260200160188a68ffffffffffffffffff16901c60020b815260200160308a68ffffffffffffffffff16901c60020b81526020018481526020018381526020015f81526020015f8152602001306001600160a01b031681526020014281525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388316456826040518263ffffffff1660e01b81526004016153ed9190615dff565b6080604051808303815f875af1158015615409573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061542d9190615ec3565b50919e9d5050505050505050505050505050565b6001600160a01b0381168114613b04575f80fd5b5f60208284031215615465575f80fd5b81356135f781615441565b5f805f60608486031215615482575f80fd5b833561548d81615441565b9250602084013561549d81615441565b929592945050506040919091013590565b62ffffff81168114613b04575f80fd5b5f805f805f60a086880312156154d2575f80fd5b85356154dd81615441565b945060208601356154ed81615441565b93506040860135925060608601359150608086013561550b816154ae565b809150509295509295909350565b5f60208284031215615529575f80fd5b5035919050565b5f805f805f60808688031215615544575f80fd5b853561554f81615441565b9450602086013561555f81615441565b935060408601359250606086013567ffffffffffffffff811115615581575f80fd5b8601601f81018813615591575f80fd5b803567ffffffffffffffff8111156155a7575f80fd5b8860208284010111156155b8575f80fd5b959894975092955050506020019190565b5f80604083850312156155da575f80fd5b82356155e581615441565b946020939093013593505050565b69ffffffffffffffffffff81168114613b04575f80fd5b5f806040838503121561561b575f80fd5b8235805f0b811461562a575f80fd5b9150602083013561563a816155f3565b809150509250929050565b5f805f8060808587031215615658575f80fd5b843561566381615441565b9350602085013561567381615441565b93969395505050506040820135916060013590565b5f8060208385031215615699575f80fd5b823567ffffffffffffffff8111156156af575f80fd5b8301601f810185136156bf575f80fd5b803567ffffffffffffffff8111156156d5575f80fd5b8560208260051b84010111156156e9575f80fd5b6020919091019590945092505050565b5f805f805f8060c0878903121561570e575f80fd5b863561571981615441565b9550602087013561572981615441565b9450604087013561573981615441565b93506060870135615749816155f3565b92506080870135615759816155f3565b9598949750929591949360a090920135925050565b5f805f60608486031215615780575f80fd5b833561578b81615441565b9250602084013561579b81615441565b915060408401356157ab81615441565b809150509250925092565b634e487b7160e01b5f52603260045260245ffd5b80518015158114612f74575f80fd5b5f602082840312156157e9575f80fd5b6135f7826157ca565b5f805f60608486031215615804575f80fd5b835161580f81615441565b602085015160409095015190969495509392505050565b8051612f74816154ae565b5f60208284031215615841575f80fd5b81516135f7816154ae565b5f610100820190506001600160a01b0383511682526001600160a01b03602084015116602083015262ffffff6040840151166040830152606083015161589d60608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e08301516158d660e08401826001600160a01b03169052565b5092915050565b5f602082840312156158ed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f61ffff82168061591b5761591b6158f4565b5f190192915050565b5f60ff82168061591b5761591b6158f4565b8051612f7481615441565b8051600281900b8114612f74575f80fd5b80516001600160801b0381168114612f74575f80fd5b5f805f805f805f805f805f806101808d8f031215615984575f80fd5b8c516bffffffffffffffffffffffff8116811461599f575f80fd5b9b506159ad60208e01615936565b9a506159bb60408e01615936565b99506159c960608e01615936565b98506159d760808e01615826565b97506159e560a08e01615941565b96506159f360c08e01615941565b9550615a0160e08e01615952565b6101008e01516101208f015191965094509250615a216101408e01615952565b9150615a306101608e01615952565b90509295989b509295989b509295989b565b805161ffff81168114612f74575f80fd5b805160ff81168114612f74575f80fd5b5f805f805f805f60e0888a031215615a79575f80fd5b8751615a8481615441565b9650615a9260208901615941565b9550615aa060408901615a42565b9450615aae60608901615a42565b9350615abc60808901615a42565b9250615aca60a08901615a53565b9150615ad860c089016157ca565b905092959891949750929550565b8082028115828204841417611bef57611bef6158f4565b80820180821115611bef57611bef6158f4565b634e487b7160e01b5f52601260045260245ffd5b5f82615b3257615b32615b10565b500490565b5f8060408385031215615b48575f80fd5b505080516020909101519092909150565b5f805f60608486031215615b6b575f80fd5b61580f84615952565b6001600160801b038281168282160390811115611bef57611bef6158f4565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103615bc757615bc76158f4565b5f0392915050565b5f60208284031215615bdf575f80fd5b81516135f781615441565b81810381811115611bef57611bef6158f4565b6001600160801b038181168382160190811115611bef57611bef6158f4565b5f60208284031215615c2c575f80fd5b6135f782615952565b5f60208284031215615c45575f80fd5b6135f782615a53565b5f82810b9082900b03607f198112607f82131715611bef57611bef6158f4565b5f61ffff821661ffff8103615c8557615c856158f4565b60010192915050565b5f60ff821660ff8103615c8557615c856158f4565b5f60208284031215615cb3575f80fd5b81516135f7816155f3565b6001600160801b0381811683821602908116908181146158d6576158d66158f4565b5f6001600160801b03831680615cf857615cf8615b10565b806001600160801b0384160491505092915050565b5f600160ff1b8203615d2157615d216158f4565b505f0390565b5f8160020b627fffff198103615bc757615bc76158f4565b5f82615d4d57615d4d615b10565b500690565b6001600160a01b038281168282160390811115611bef57611bef6158f4565b5f60208284031215615d81575f80fd5b6135f782615941565b8181035f8312801583831316838312821617156158d6576158d66158f4565b8082025f8212600160ff1b84141615615dc457615dc46158f4565b8181058314821517611bef57611bef6158f4565b8082018281125f831280158216821582161715615df757615df76158f4565b505092915050565b81516001600160a01b0316815261016081016020830151615e2b60208401826001600160a01b03169052565b506040830151615e42604084018262ffffff169052565b506060830151615e57606084018260020b9052565b506080830151615e6c608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151615eb36101208401826001600160a01b03169052565b5061014092830151919092015290565b5f805f8060808587031215615ed6575f80fd5b84519350615ee660208601615952565b604086015160609096015194979096509250505056fea2646970667358221220566a8d3e66d99f92e0ac1643681459456d2fee3b57fceab62fca050a93e71a0364736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d