26 txs
60 calls
constructor
constructor(address utilsAdr)
functions
contractBalance
viewfunction contractBalance(address token) view returns (uint256 balance)
controller
viewfunction controller() view returns (address)
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)
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)
router02
viewfunction router02() view returns (address)
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)
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
Consideration
event Consideration(uint256 minOut, uint256 outV2)
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
0x61010060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a0527388e6a0c2ddd26feeb64f039a2c41296fcb3f564060c05273c36442b4a4522e871399cd717abdd847ab11fe8860e052600e805460ff199081169091556038805482169055603b8054909116905534801561008e575f5ffd5b506040516165b33803806165b38339810160408190526100ad916104cb565b6100b633610156565b6080516001600160a01b039081165f908152600160208190526040808320805460ff19908116841790915560a051948516845290832080548216831790559180527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054909216179055610129906101a5565b608051610135906101a5565b61013e3361037b565b610147336103e2565b61015081610442565b50610517565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116158015906101d557506001600160a01b0381165f908152603a602052604090205460ff16155b156103785760405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610238573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025c91906104f8565b5060e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529082169063095ea7b3906044016020604051808303815f875af11580156102ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d191906104f8565b5060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610330573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035491906104f8565b506001600160a01b0381165f908152603a60205260409020805460ff191660011790555b50565b61038361046c565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91015b60405180910390a15050565b6103ea61046c565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691016103d6565b61044a61046c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b5f602082840312156104db575f5ffd5b81516001600160a01b03811681146104f1575f5ffd5b9392505050565b5f60208284031215610508575f5ffd5b815180151581146104f1575f5ffd5b60805160a05160c05160e051615f4d6106665f395f81816104cb01528181611321015281816116530152818161191301528181611af201528181611c1e015281816121b9015281816127270152818161319f01528181614b3d015261529501525f50505f8181610bb701528181610c0301528181610c7c01528181610cef01528181610e0101528181610fa601528181610fdd0152818161103b0152818161108a0152818161121201528181611e1c0152818161248e0152818161254a0152818161260501528181612929015281816129be0152818161307b015281816136200152818161364f01528181613a1401528181613a4f01528181613b6a015281816145f9015261465501525f8181611e60015281816124ce0152818161252801528181612ff2015281816136790152818161375201528181613de6015281816144e501526145410152615f4d5ff3fe60806040526004361061025b575f3560e01c806363011d1a11610142578063b17acdcd116100ba578063c4b19b5411610076578063c4b19b541461081a578063c53b770214610839578063df2a558b14610866578063f2fde38b14610894578063f60b36e3146108b3578063f77c4791146108d257005b8063b17acdcd1461072b578063bc3291981461074a578063bd00c9c414610763578063bf0e622b1461078a578063c31c9c07146107cc578063c45a0155146107f357005b80638da5cb5b116101095780638da5cb5b1461063a57806392eefe9b1461065657806399fbab88146106755780639a7fe3a1146106ca5780639ba69249146106e9578063a9e88b8f146106fd57005b806363011d1a1461058857806369953501146105b45780636a0f27c2146105d3578063715018a6146106095780638abb98451461061d57005b8063329aa414116101d5578063439370b11161019c578063439370b1146104b2578063481c6a75146104ba578063495915d3146104ed57806349c69fd81461050c5780634a2539c31461054a5780635a29638d1461056957005b8063329aa414146103fc57806332c4171d1461041b578063338b5dea1461043a57806339040ed11461045957806342d9843e1461048457005b80630acc8cd1116102245780630acc8cd11461032a578063145a6ae014610349578063150b7a021461036857806319cc3357146103ac5780631b9a91a4146103c05780633018205f146103df57005b8062ae3bf81461025d57806301e336671461027c578063041ae8801461029b57806308092e9a146102d75780630a861f2a1461030b575b005b348015610268575f5ffd5b5061025b610277366004615347565b6108f1565b348015610287575f5ffd5b5061025b610296366004615362565b610a3d565b3480156102a6575f5ffd5b506003546102ba906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e2575f5ffd5b506102f66102f13660046153b0565b610b6b565b604080519283526020830191909152016102ce565b348015610316575f5ffd5b5061025b61032536600461540b565b6112e0565b348015610335575f5ffd5b5061025b610344366004615347565b611587565b348015610354575f5ffd5b5061025b61036336600461540b565b6115ef565b348015610373575f5ffd5b50610393610382366004615422565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102ce565b3480156103b7575f5ffd5b5061025b611a25565b3480156103cb575f5ffd5b5061025b6103da3660046154bb565b611a3c565b3480156103ea575f5ffd5b506002546001600160a01b03166102ba565b348015610407575f5ffd5b5061025b61041636600461540b565b611ada565b348015610426575f5ffd5b5061025b6104353660046154e5565b611d21565b348015610445575f5ffd5b5061025b6104543660046154bb565b611edc565b348015610464575f5ffd5b50600e546104729060ff1681565b60405160ff90911681526020016102ce565b34801561048f575f5ffd5b5061047261049e36600461540b565b60396020525f908152604090205460ff1681565b61025b612002565b3480156104c5575f5ffd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f8575f5ffd5b5061025b610507366004615528565b61203c565b348015610517575f5ffd5b5061053a610526366004615347565b603a6020525f908152604090205460ff1681565b60405190151581526020016102ce565b348015610555575f5ffd5b5061025b61056436600461540b565b61210c565b348015610574575f5ffd5b506004546102ba906001600160a01b031681565b348015610593575f5ffd5b5061059c612475565b6040516001600160801b0390911681526020016102ce565b3480156105bf575f5ffd5b5061025b6105ce366004615347565b612a42565b3480156105de575f5ffd5b506105f26105ed3660046155b0565b612a6c565b6040805192835260ff9091166020830152016102ce565b348015610614575f5ffd5b5061025b612f06565b348015610628575f5ffd5b506003546001600160a01b03166102ba565b348015610645575f5ffd5b505f546001600160a01b03166102ba565b348015610661575f5ffd5b5061025b610670366004615347565b612f19565b348015610680575f5ffd5b5061069461068f36600461540b565b612f78565b604080516001600160a01b039687168152602081019590955284019290925283166060830152909116608082015260a0016102ce565b3480156106d5575f5ffd5b5061059c6106e4366004615347565b612fbb565b3480156106f4575f5ffd5b5061059c613060565b348015610708575f5ffd5b5061053a610717366004615347565b60016020525f908152604090205460ff1681565b348015610736575f5ffd5b5061025b61074536600461540b565b613123565b348015610755575f5ffd5b506038546104729060ff1681565b34801561076e575f5ffd5b506102ba737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610795575f5ffd5b506107b96107a4366004615347565b60056020525f908152604090205461ffff1681565b60405161ffff90911681526020016102ce565b3480156107d7575f5ffd5b506102ba73e592427a0aece92de3edee1f18e0157c0586156481565b3480156107fe575f5ffd5b506102ba731f98431c8ad98523631ae4a59f267346ea31f98481565b348015610825575f5ffd5b506102ba61083436600461540b565b6133ac565b348015610844575f5ffd5b50610858610853366004615347565b6133cb565b6040519081526020016102ce565b348015610871575f5ffd5b50610472610880366004615347565b600f6020525f908152604090205460ff1681565b34801561089f575f5ffd5b5061025b6108ae366004615347565b61344e565b3480156108be575f5ffd5b5061025b6108cd366004615347565b6134c7565b3480156108dd575f5ffd5b506002546102ba906001600160a01b031681565b6108f96136f7565b6001600160a01b0381165f908152600f6020526040902054600e5460ff9182169116811015806109525750816001600160a01b031660068260ff166008811061094457610944615625565b01546001600160a01b031614155b6109a35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74202772657363756527206465706f73697473000000000000000060448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb6109c35f546001600160a01b031690565b6109cc856133cb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610a14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a389190615648565b505050565b8015610a38576003546001600160a01b03163314610a6d5760405162461bcd60e51b815260040161099a90615661565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610ab9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610add9190615648565b610b1b5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161099a565b610b2483613750565b604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505050565b6002545f9081906001600160a01b0316331480610b8757503330145b610ba35760405162461bcd60e51b815260040161099a90615661565b6001600160a01b038716158015610beb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b15610c7a57838510610bfd5783610bff565b845b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c5a575f5ffd5b505af1158015610c6c573d5f5f3e3d5ffd5b508594506112d69350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316148015610cc257506001600160a01b038616155b15610d5757838510610cd45783610cd6565b845b604051632e1a7d4d60e01b8152600481018290529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610d38575f5ffd5b505af1158015610d4a573d5f5f3e3d5ffd5b508493506112d692505050565b600480546040516364aa79a360e01b81526001600160a01b038a8116938201939093528883166024820152604481018890526064810187905262ffffff861660848201525f92839216906364aa79a39060a401606060405180830381865afa158015610dc5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de99190615687565b90955090925090506001600160a01b038916610e70577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015610e58575f5ffd5b505af1158015610e6a573d5f5f3e3d5ffd5b50505050505b5f826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610ead573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed191906156ed565b5050505050509050610ee48a8a83613924565b90505f5f826001600160a01b0316836001600160a01b03160290505f856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f60919061577b565b620f42400362ffffff169050610f87816001600160801b0316890283613d0960c61b613965565b92506110049150506001600160a01b038c1615610fa4578b610fc6565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b038c1615610fdb578b610ffd565b7f00000000000000000000000000000000000000000000000000000000000000005b8884613a0f565b9450845f036111d6575f6040518061010001604052805f6001600160a01b03168e6001600160a01b031614611039578d61105b565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031681526020015f6001600160a01b03168d6001600160a01b031614611088578c6110aa565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611118919061577b565b62ffffff168152602001306001600160a01b031681526020014281526020018881526020018581526020015f6001600160a01b0316815250905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf389826040518263ffffffff1660e01b81526004016111929190615796565b6020604051808303815f875af11580156111ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d29190615813565b9550505b6001600160a01b038b16156111ee576111ee8b613750565b6001600160a01b038a1661127657604051632e1a7d4d60e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561125b575f5ffd5b505af115801561126d573d5f5f3e3d5ffd5b5050505061127f565b61127f8a613dc8565b604080516001600160a01b03808e1682528c166020820152908101879052606081018690527f25f1d03755df23c30e25db2dbd3891e31ce084bdfbfc46f9fe5e446ee5f9b2d49060800160405180910390a1505050505b9550959350505050565b6003546001600160a01b0316331461130a5760405162461bcd60e51b815260040161099a90615661565b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061135a9030903390869060040161582a565b5f604051808303815f87803b158015611371575f5ffd5b505af1158015611383573d5f5f3e3d5ffd5b5050505f8281526039602052604081205460ff169150601082600881106113ac576113ac615625565b60385460059190910291909101915060ff9081169083161080156113d35750828160020154145b15610a385760038101546001600160a01b03165f908152600560205260408120805461ffff169161140383615862565b82546101009290920a61ffff81810219909316918316021790915560048301546001600160a01b03165f9081526005602052604081208054909216925061144983615862565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f6114798361587e565b82546101009290920a60ff81810219909316918316021790915560385416159050610a385760385460109060ff16600881106114b7576114b7615625565b6005020160108360ff16600881106114d1576114d1615625565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558160395f601060ff84166008811061155657611556615625565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff160217905550505050565b61158f6136f7565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691015b60405180910390a15050565b6002546001600160a01b031633146116195760405162461bcd60e51b815260040161099a90615661565b61162281613123565b5f8181526039602052604081205460ff16906010826008811061164757611647615625565b6005020190505f5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88886040518263ffffffff1660e01b815260040161169f91815260200190565b61018060405180830381865afa1580156116bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116df91906158b1565b505050505096509650509550955050505f855f015f9054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611741573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176591906156ed565b50505050505090505f611777866133cb565b90506117a2611785866133cb565b600160c01b61179d6001600160a01b0386168061598b565b613965565b6117ac90826159a2565b90505f6117ca6117bb86613f68565b6117c486613f68565b8461437b565b6004549091505f9081906001600160a01b031663c72e160b866117ec8a613f68565b6117f58a613f68565b606461180b6001600160801b038a16606261598b565b61181591906159c9565b6040518563ffffffff1660e01b815260040161183494939291906159dc565b6040805180830381865afa15801561184e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118729190615a0e565b9150915061188289898484611d21565b5f6040518060c001604052808e815260200161189d8c6133cb565b81526020016118ab8b6133cb565b81525f6020808301829052604080840183905242606094850152805163219f5d1760e01b81528551600482015291850151602483015284015160448201529183015160648301526080830151608483015260a083015160a48301529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063219f5d179060c4016060604051808303815f875af1158015611959573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197d9190615a30565b8095508196508293505050507f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c8e8d6003015f9054906101000a90046001600160a01b03168e6004015f9054906101000a90046001600160a01b031684604051611a0d94939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a15050505050505050505050505050565b611a2d6136f7565b603b805460ff19166001179055565b8015611ad6576003546001600160a01b03163314611a6c5760405162461bcd60e51b815260040161099a90615661565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611a9f573d5f5f3e3d5ffd5b50604080515f8152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d591016115e3565b5050565b60405163133f757160e31b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6491906158b1565b5050505f8b815260396020526040812054929a5060ff90921698509096506010955087945050600884109250611b9f91505057611b9f615625565b6005020190506001600160801b03831615611d1b576040805160a0810182528581526001600160801b03858116602083019081525f8385018181526060850191825242608086019081529551630624e65f60e11b81528551600482015292519093166024830152915160448201529051606482015291516084830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c49ccbe9060a40160408051808303815f875af1158015611c6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c8f9190615a0e565b5050600382015460048301547f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c9187916001600160a01b039182169116611cd588615a4b565b604051611d0894939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1611d1985613123565b505b50505050565b5f611d2b856133cb565b90505f611d37856133cb565b9050838210158015611d495750828110155b15611d55575050611d1b565b5f5f5f848710611d6757848703611d69565b5f5b9150838610611d7a57838603611d7c565b5f5b90508685108015611d8c57508584115b15611dce5785840392505f611db1898b86620f4240620f7cd888025b04613a98610b6b565b91505080831115611dc457808303611dc6565b5f5b925050611e15565b8584108015611ddc57508685115b15611e155786850392505f611dfc8a8a86620f4240620f7cd88702611da8565b91505080821115611e0f57808203611e11565b5f5b9150505b611e4289897f000000000000000000000000000000000000000000000000000000000000000085856143e4565b9092509050611e5489895f85856143e4565b9092509050611e8689897f000000000000000000000000000000000000000000000000000000000000000085856143e4565b909250905081158015611e97575080155b611ed15760405162461bcd60e51b815260206004820152600b60248201526a155b99195c999d5b99195960aa1b604482015260640161099a565b505050505050505050565b8015611ad6576003546001600160a01b03163314611f0c5760405162461bcd60e51b815260040161099a90615661565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd90611f3c9033903090869060040161582a565b6020604051808303815f875af1158015611f58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190615648565b611fba5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161099a565b611fc382613dc8565b604080516001600160a01b0384168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c491016115e3565b604080515f81523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b6120446136f7565b603b5460ff16156120805760405162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015260640161099a565b5f612089613060565b600802662386f26fc100000190505f5f90505b60ff8116831115611d1b575f84848360ff168181106120bd576120bd615625565b90506020020160208101906120d29190615347565b6001600160a01b0381165f908152600160208190526040909120805460ff19169091179055905061210381846144e3565b5060010161209c565b6002546001600160a01b031633146121365760405162461bcd60e51b815260040161099a90615661565b5f8181526039602052604081205460ff16906010826008811061215b5761215b615625565b60050201600381015460048201549192506001600160a01b0390811691165f612183836133cb565b90505f61218f836133cb565b905061219a87611ada565b6121a387613123565b604051630852cd8d60e31b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b158015612202575f5ffd5b505af1158015612214573d5f5f3e3d5ffd5b505050505f82612223866133cb565b61222d9190615a78565b90505f8261223a866133cb565b6122449190615a78565b6001600160a01b0387165f908152600560205260408120805492935061ffff909216919061227183615862565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b0387165f908152600560205260408120805490921692506122b383615862565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f6122e38361587e565b82546101009290920a60ff818102199093169183160217909155603854161590506123ed5760385460109060ff166008811061232157612321615625565b6005020160108960ff166008811061233b5761233b615625565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558760395f601060ff8416600881106123c0576123c0615625565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505b6103e88210156124005761240086613750565b6103e88110156124135761241385613750565b604080518a81526001600160a01b038881166020830152871681830152606081018490526080810183905290517f5501b833962ceaf131361ff8d59683c382ab00f523035d0fc4c2ffc19bef3a459181900360a00190a1505050505050505050565b5f612483620f4240476159c9565b9050620f42406124b27f00000000000000000000000000000000000000000000000000000000000000006133cb565b6124bc91906159c9565b6124c69082615a8b565b90505f6124f27f00000000000000000000000000000000000000000000000000000000000000006133cb565b90506207a1208111156125be57600480546040516332d2f46960e11b81526001600160a01b03909116916365a5e8d291612572917f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009187910161582a565b602060405180830381865afa15801561258d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125b19190615aaa565b6125bb9083615a8b565b91505b5f5b600e5460ff908116908216101561270c576004546001600160a01b03166365a5e8d2600660ff8416600881106125f8576125f8615625565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000600660ff86166008811061263a5761263a615625565b01546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561267f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a39190615813565b6040518463ffffffff1660e01b81526004016126c19392919061582a565b602060405180830381865afa1580156126dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127009190615aaa565b909201916001016125c0565b505f5b60385460ff9081169082161015612a3d575f5f5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab8860108860ff166008811061276a5761276a615625565b60050201600201546040518263ffffffff1660e01b815260040161279091815260200190565b61018060405180830381865afa1580156127ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d091906158b1565b50505050975097509750509650965050505f60108760ff16600881106127f8576127f8615625565b600502015460408051633850c7bd60e01b815290516001600160a01b0390921691633850c7bd9160048082019260e0929091908290030181865afa158015612842573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286691906156ed565b50506004549495505f948594506001600160a01b0316925063c72e160b915085905061289189613f68565b61289a89613f68565b886040518563ffffffff1660e01b81526004016128ba94939291906159dc565b6040805180830381865afa1580156128d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f89190615a0e565b600480546040516332d2f46960e11b81529395509193506001600160a01b03909116916365a5e8d291612951918c917f00000000000000000000000000000000000000000000000000000000000000009188910161582a565b602060405180830381865afa15801561296c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129909190615aaa565b600480546040516332d2f46960e11b815292909d019c6001600160a01b0316916365a5e8d2916129e6918b917f00000000000000000000000000000000000000000000000000000000000000009187910161582a565b602060405180830381865afa158015612a01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a259190615aaa565b909a019950506001909601955061270f945050505050565b505090565b612a4a6136f7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002545f9081906001600160a01b03163314612a9a5760405162461bcd60e51b815260040161099a90615661565b603854600860ff90911610612ae15760405162461bcd60e51b815260206004820152600d60248201526c4f7574206f66206d656d6f727960981b604482015260640161099a565b856001600160a01b0316876001600160a01b031603612b2f5760405162461bcd60e51b815260206004820152600a60248201526929b0b6b2903a37b5b2b760b11b604482015260640161099a565b5f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b909190615ac3565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf09190615ac3565b612bfa9190615adc565b90505f612c118989612c0c858b6146d6565b613924565b90505f612c238a8a612c0c868b6146d6565b90505f8b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612c62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8691906156ed565b5050505050509050816001600160a01b0316836001600160a01b03161115612cac579091905b5f612cb884848a61437b565b90505f612cca8e8e8e86898988614718565b6001600160a01b038f165f9081526005602052604081208054939b5091935061ffff90921691612cf983615afc565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b038e165f90815260056020526040812080549092169250612d3b83615afc565b91906101000a81548161ffff021916908361ffff160217905550506040518060a001604052808f6001600160a01b031681526020018281526020018981526020018e6001600160a01b031681526020018d6001600160a01b0316815250601060385f9054906101000a900460ff1660ff1660088110612dbc57612dbc615625565b82516005919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401556040808601516002850155606086015160038501805485169187169190911790556080909501516004909301805490921692909316919091179055603880545f8c81526039909352928220805460ff94851660ff1990911617905580549092169850889190612e5d83615b1c565b91906101000a81548160ff021916908360ff160217905550507f29cd472535c058e9f744cc9cead6f8c38cbe5ea230674d825060f275884bdd72888e8e8e8e8e604051612eed969594939291909586526001600160a01b03948516602087015292909316604085015269ffffffffffffffffffff908116606085015291909116608083015260a082015260c00190565b60405180910390a1505050505050965096945050505050565b612f0e6136f7565b612f175f61494e565b565b612f216136f7565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91016115e3565b60108160088110612f87575f80fd5b6005020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092908116911685565b5f5f612fc6836133cb565b600480546040516332d2f46960e11b81529293506001600160a01b0316916365a5e8d29161301a9187917f00000000000000000000000000000000000000000000000000000000000000009187910161582a565b602060405180830381865afa158015613035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130599190615aaa565b9392505050565b60048054604051633a92f14760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093525f9264e8d4a5100092169063ea4bc51c90602401602060405180830381865afa1580156130d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f69190615b31565b69ffffffffffffffffffff1661310a612475565b6131149190615b4c565b61311e9190615b6e565b905090565b5f818152603960209081526040808320548151608081018352858152309381019384526001600160801b0381840181815260608301828152945163fc6f786560e01b81528351600482015295516001600160a01b039081166024880152905182166044870152935116606485015260ff909116939092909182917f00000000000000000000000000000000000000000000000000000000000000009091169063fc6f78659060840160408051808303815f875af11580156131e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061320a9190615a0e565b915091505f60108560ff166008811061322557613225615625565b600502018054600482015460038301549293506001600160a01b03918216925f929182169116106132b557816001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132b09190615813565b613315565b816001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133159190615813565b60018401819055600484015460038501549192506001600160a01b0390811691161115613340579293925b60038301546004840154604080518b81526001600160a01b03938416602082015292909116828201526060820187905260808201869052517ff75febe5036272e29c10c008070a13657798560aaa45a46b302b112d865ff1f29181900360a00190a15050505050505050565b600681600881106133bb575f80fd5b01546001600160a01b0316905081565b5f6001600160a01b03821615613446576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa15801561341d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134419190615813565b613448565b475b92915050565b6134566136f7565b6001600160a01b0381166134bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b6134c48161494e565b50565b6002546001600160a01b03163314806134e957505f546001600160a01b031633145b6135255760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b604482015260640161099a565b6001600160a01b0381165f9081526001602052604090205460ff1661357c5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161099a565b60385460ff165b60ff8116156135e657604051634a2539c360e01b815260ff5f199290920191821660048201523090634a2539c3906024015f604051808303815f87803b1580156135cb575f5ffd5b505af11580156135dd573d5f5f3e3d5ffd5b50505050613583565b50600e5460ff165b60ff811615613649575f1901613644600660ff83166008811061361357613613615625565b01546001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000061499d565b6135ee565b506136747f00000000000000000000000000000000000000000000000000000000000000008261499d565b61369e7f00000000000000000000000000000000000000000000000000000000000000008261499d565b6136a85f8261499d565b600280546001600160a01b03191690556040516001600160a01b03821681527f2cc79b200fc7fdf7af6be005fc77813bfacedb82066816356eed5b7df46194709060200160405180910390a150565b5f546001600160a01b03163314612f175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316148061379757506001600160a01b038116155b1561379f5750565b6001600160a01b0381165f908152600f6020526040902054600e5460ff9182169116811080156137f75750816001600160a01b031660068260ff16600881106137ea576137ea615625565b01546001600160a01b0316145b801561380b57506064613809836133cb565b105b801561383057506001600160a01b0382165f9081526005602052604090205461ffff16155b15611ad657600e805460ff16905f6138478361587e565b82546101009290920a60ff818102199093169183160217909155600e5416158015915061387c5750600e5460ff828116911614155b15611ad657600e5460069060ff166008811061389a5761389a615625565b01546001600160a01b0316600660ff8316600881106138bb576138bb615625565b0180546001600160a01b0319166001600160a01b039290921691909117905580600f5f600660ff8416600881106138f4576138f4615625565b01546001600160a01b0316815260208101919091526040015f20805460ff191660ff929092169190911790555050565b5f826001600160a01b0316846001600160a01b03161015613946575080613059565b61395d6001600160a01b038316600160c01b6159c9565b949350505050565b5f80805f19858709858702925082811083820303915050805f03613999575f841161398e575f5ffd5b508290049050613059565b8084116139a4575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480613a8357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b15613b1457604080516002808252606082018352909160208301908036833701905050905085815f81518110613abb57613abb615625565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110613aef57613aef615625565b60200260200101906001600160a01b031690816001600160a01b031681525050613bf1565b60408051600380825260808201909252906020820160608036833701905050905085815f81518110613b4857613b48615625565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613b9c57613b9c615625565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600281518110613bd057613bd0615625565b60200260200101906001600160a01b031690816001600160a01b0316815250505b60405163d06ca61f60e01b81525f90737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f90613c2c9088908690600401615bf2565b5f60405180830381865afa158015613c46573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c6d9190810190615c0a565b9050838160018351613c7f9190615a78565b81518110613c8f57613c8f615625565b60200260200101511015613ca7575f9250505061395d565b7fca6918f0ef8e88ad2e9b2e198a8550bd57a61f396617d27615cb8ef07c7f2fa1848260018451613cd89190615a78565b81518110613ce857613ce8615625565b6020026020010151604051613d07929190918252602082015260400190565b60405180910390a16040516338ed173960e01b81525f90737a250d5630b4cf539739df2c5dacb4c659f2488d906338ed173990613d509089908990889030904290600401615cd2565b5f604051808303815f875af1158015613d6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d929190810190615c0a565b90508060018251613da39190615a78565b81518110613db357613db3615625565b60200260200101519350505050949350505050565b613dd181614a6e565b6001600160a01b03811615801590613e1b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b156134c4576001600160a01b0381165f818152600f602052604090205460069060ff1660088110613e4e57613e4e615625565b01546001600160a01b0316141580613e865750600e546001600160a01b0382165f908152600f602052604090205460ff918216911610155b156134c457600e54600860ff90911610613ed25760405162461bcd60e51b815260206004820152600d60248201526c4f7574206f66206d656d6f727960981b604482015260640161099a565b613ee381613ede613060565b6144e3565b600e54819060069060ff1660088110613efe57613efe615625565b0180546001600160a01b039283166001600160a01b0319909116179055600e80549183165f908152600f60205260408120805460ff191660ff948516179055815490921691613f4c83615b1c565b91906101000a81548160ff021916908360ff1602179055505050565b5f5f5f8360020b12613f7d578260020b613f8a565b8260020b613f8a90615d0d565b9050613f99620d89e719615d27565b62ffffff16811115613fd15760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161099a565b5f816001165f03613fe657600160801b613ff8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614037576080614032826ffff97272373d413259a46990580e213a61598b565b901c90505b600482161561406157608061405c826ffff2e50f5f656932ef12357cf3c7fdcc61598b565b901c90505b600882161561408b576080614086826fffe5caca7e10e4e61c3624eaa0941cd061598b565b901c90505b60108216156140b55760806140b0826fffcb9843d60f6159c9db58835c92664461598b565b901c90505b60208216156140df5760806140da826fff973b41fa98c081472e6896dfb254c061598b565b901c90505b6040821615614109576080614104826fff2ea16466c96a3843ec78b326b5286161598b565b901c90505b608082161561413357608061412e826ffe5dee046a99a2a811c461f1969c305361598b565b901c90505b61010082161561415e576080614159826ffcbe86c7900a88aedcffc83b479aa3a461598b565b901c90505b610200821615614189576080614184826ff987a7253ac413176f2b074cf7815e5461598b565b901c90505b6104008216156141b45760806141af826ff3392b0822b70005940c7a398e4b70f361598b565b901c90505b6108008216156141df5760806141da826fe7159475a2c29b7443b29c7fa6e889d961598b565b901c90505b61100082161561420a576080614205826fd097f3bdfd2022b8845ad8f792aa582561598b565b901c90505b612000821615614235576080614230826fa9f746462d870fdf8a65dc1f90e061e561598b565b901c90505b61400082161561426057608061425b826f70d869a156d2a1b890bb3df62baf32f761598b565b901c90505b61800082161561428b576080614286826f31be135f97d08fd981231505542fcfa661598b565b901c90505b620100008216156142b75760806142b2826f09aa508b5b7a84e1c677de54f3e99bc961598b565b901c90505b620200008216156142e25760806142dd826e5d6af8dedb81196699c329225ee60461598b565b901c90505b6204000082161561430c576080614307826d2216e584f5fa1ea926041bedfe9861598b565b901c90505b6208000082161561433457608061432f826b048a170391f7dc42444e8fa261598b565b901c90505b5f8460020b131561434d5761434a815f196159c9565b90505b61435c64010000000082615d3f565b1561436857600161436a565b5f5b61395d9060ff16602083901c6159a2565b5f826001600160a01b0316846001600160a01b0316111561439a579192915b5f6143bc856001600160a01b0316856001600160a01b0316600160601b613965565b90506143db83826143cd8888615d52565b6001600160a01b0316613965565b95945050505050565b5f5f846001600160a01b0316876001600160a01b03161415801561441a5750846001600160a01b0316866001600160a01b031614155b156144d7575f614429866133cb565b9050620f4240811015801561443d57505f85115b1561448d575f8061446d888b85620f424061445b8c620f7cd861598b565b61446591906159c9565b613a98610b6b565b9150915081830392508681101561448657808703614488565b5f5b965050505b620f4240811015801561449f57505f84115b156144d5575f6144bc878984620f424061445b8a620f7cd861598b565b915050848110156144cf578085036144d1565b5f5b9450505b505b50919590945092505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146145f75760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af19250505080156145bc575060408051601f3d908101601f191682019092526145b991810190615d71565b60015b6145f5573d8080156145e9576040519150601f19603f3d011682016040523d82523d5f602084013e6145ee565b606091505b50506145f7565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611ad65760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af11580156146b2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a389190615d71565b5f5f6146fc8369ffffffffffffffffffff16600160c01b86600c0160ff16600a0a613965565b905061470781614c5f565b6001600160801b0316949350505050565b5f5f5f896001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614757573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061477b9190615d8c565b62ffffff1690506018818260020b61479289614dd0565b60020b816147a2576147a26159b5565b050262ffffff1668ffffffffffffffffff16901b811790506030818260020b6147ca88614dd0565b60020b816147da576147da6159b5565b050262ffffff1668ffffffffffffffffff16901b8117905061485f89898987858f6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015614836573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061485a919061577b565b615105565b9250876001600160a01b0316896001600160a01b0316106148df57896001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148da9190615813565b61493f565b896001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561491b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061493f9190615813565b91505097509795505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6149a7836133cb565b9050816001600160a01b0316836001600160a01b031614610a3857604051630404974d60e11b81526001600160a01b03808516600483015283166024820152604481018290525f196064820152620124f8608482015230906308092e9a9060a40160408051808303815f875af1925050508015614a41575060408051601f3d908101601f19168201909252614a3e91810190615a0e565b60015b611d19573d808015611d19576040519150601f19603f3d011682016040523d82523d5f602084013e611d19565b6001600160a01b03811615801590614a9e57506001600160a01b0381165f908152603a602052604090205460ff16155b156134c45760405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015614b01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b259190615648565b5060405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f19602483015282169063095ea7b3906044016020604051808303815f875af1158015614b92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bb69190615648565b5060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015614c15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c399190615648565b506001600160a01b0381165f908152603a60205260409020805460ff1916600117905550565b5f815f03614c6e57505f919050565b816001600160801b8210614c875760809190911c9060401b5b680100000000000000008210614ca25760409190911c9060201b5b6401000000008210614cb95760209190911c9060101b5b620100008210614cce5760109190911c9060081b5b6101008210614ce25760089190911c9060041b5b60108210614cf55760049190911c9060021b5b60088210614d015760011b5b6001818581614d1257614d126159b5565b048201901c90506001818581614d2a57614d2a6159b5565b048201901c90506001818581614d4257614d426159b5565b048201901c90506001818581614d5a57614d5a6159b5565b048201901c90506001818581614d7257614d726159b5565b048201901c90506001818581614d8a57614d8a6159b5565b048201901c90506001818581614da257614da26159b5565b0491909101901c5f614db482866159c9565b9050808210614dc357806143db565b509392505050565b919050565b5f6401000276a36001600160a01b03831610801590614e0b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b614e3b5760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161099a565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110614ed657614ecc607f82615a78565b83901c9150614ee7565b614ee181607f615a78565b83901b91505b5f6040614ef5608084615da5565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c856150779190615dc4565b90505f60806150966f028f6481ab7f045a5af012a19d003aaa84615da5565b901d90505f60806150b7846fdb2df09e81959a81455e260799a0632f615df3565b901d90508060020b8260020b146150f657886001600160a01b03166150db82613f68565b6001600160a01b031611156150f057816150f8565b806150f8565b815b9998505050505050505050565b5f5f866001600160a01b0316886001600160a01b0316116151265787615128565b865b90505f876001600160a01b0316896001600160a01b03161161514a578761514c565b885b6004549091505f9081906001600160a01b031663c72e160b8a61517a65ffffffffffff60188c901c16613f68565b61519260308c68ffffffffffffffffff16901c613f68565b8c6040518563ffffffff1660e01b81526004016151b294939291906159dc565b6040805180830381865afa1580156151cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151f09190615a0e565b9150915061520084848484611d21565b5f604051806101600160405280866001600160a01b03168152602001856001600160a01b031681526020018862ffffff16815260200160188a68ffffffffffffffffff16901c60020b815260200160308a68ffffffffffffffffff16901c60020b81526020018481526020018381526020015f81526020015f8152602001306001600160a01b031681526020014281525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388316456826040518263ffffffff1660e01b81526004016152df9190615e1a565b6080604051808303815f875af11580156152fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061531f9190615ede565b50919e9d5050505050505050505050505050565b6001600160a01b03811681146134c4575f5ffd5b5f60208284031215615357575f5ffd5b813561305981615333565b5f5f5f60608486031215615374575f5ffd5b833561537f81615333565b9250602084013561538f81615333565b929592945050506040919091013590565b62ffffff811681146134c4575f5ffd5b5f5f5f5f5f60a086880312156153c4575f5ffd5b85356153cf81615333565b945060208601356153df81615333565b9350604086013592506060860135915060808601356153fd816153a0565b809150509295509295909350565b5f6020828403121561541b575f5ffd5b5035919050565b5f5f5f5f5f60808688031215615436575f5ffd5b853561544181615333565b9450602086013561545181615333565b935060408601359250606086013567ffffffffffffffff811115615473575f5ffd5b8601601f81018813615483575f5ffd5b803567ffffffffffffffff811115615499575f5ffd5b8860208284010111156154aa575f5ffd5b959894975092955050506020019190565b5f5f604083850312156154cc575f5ffd5b82356154d781615333565b946020939093013593505050565b5f5f5f5f608085870312156154f8575f5ffd5b843561550381615333565b9350602085013561551381615333565b93969395505050506040820135916060013590565b5f5f60208385031215615539575f5ffd5b823567ffffffffffffffff81111561554f575f5ffd5b8301601f8101851361555f575f5ffd5b803567ffffffffffffffff811115615575575f5ffd5b8560208260051b8401011115615589575f5ffd5b6020919091019590945092505050565b69ffffffffffffffffffff811681146134c4575f5ffd5b5f5f5f5f5f5f60c087890312156155c5575f5ffd5b86356155d081615333565b955060208701356155e081615333565b945060408701356155f081615333565b9350606087013561560081615599565b9250608087013561561081615599565b9598949750929591949360a090920135925050565b634e487b7160e01b5f52603260045260245ffd5b80518015158114614dcb575f5ffd5b5f60208284031215615658575f5ffd5b61305982615639565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b5f5f5f60608486031215615699575f5ffd5b83516156a481615333565b602085015160409095015190969495509392505050565b8051600281900b8114614dcb575f5ffd5b805161ffff81168114614dcb575f5ffd5b805160ff81168114614dcb575f5ffd5b5f5f5f5f5f5f5f60e0888a031215615703575f5ffd5b875161570e81615333565b965061571c602089016156bb565b955061572a604089016156cc565b9450615738606089016156cc565b9350615746608089016156cc565b925061575460a089016156dd565b915061576260c08901615639565b905092959891949750929550565b8051614dcb816153a0565b5f6020828403121561578b575f5ffd5b8151613059816153a0565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015191821690830152610100820190506080830151608083015260a083015160a083015260c083015160c083015260e083015161580c60e08401826001600160a01b03169052565b5092915050565b5f60208284031215615823575f5ffd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b5f52601160045260245ffd5b5f61ffff8216806158755761587561584e565b5f190192915050565b5f60ff8216806158755761587561584e565b8051614dcb81615333565b80516001600160801b0381168114614dcb575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f0312156158cd575f5ffd5b8c516bffffffffffffffffffffffff811681146158e8575f5ffd5b9b506158f660208e01615890565b9a5061590460408e01615890565b995061591260608e01615890565b985061592060808e01615770565b975061592e60a08e016156bb565b965061593c60c08e016156bb565b955061594a60e08e0161589b565b6101008e01516101208f01519196509450925061596a6101408e0161589b565b91506159796101608e0161589b565b90509295989b509295989b509295989b565b80820281158282048414176134485761344861584e565b808201808211156134485761344861584e565b634e487b7160e01b5f52601260045260245ffd5b5f826159d7576159d76159b5565b500490565b6001600160a01b0394851681529284166020840152921660408201526001600160801b03909116606082015260800190565b5f5f60408385031215615a1f575f5ffd5b505080516020909101519092909150565b5f5f5f60608486031215615a42575f5ffd5b6156a48461589b565b5f81600f0b6f7fffffffffffffffffffffffffffffff198103615a7057615a7061584e565b5f0392915050565b818103818111156134485761344861584e565b6001600160801b0381811683821601908111156134485761344861584e565b5f60208284031215615aba575f5ffd5b6130598261589b565b5f60208284031215615ad3575f5ffd5b613059826156dd565b5f82810b9082900b03607f198112607f821317156134485761344861584e565b5f61ffff821661ffff8103615b1357615b1361584e565b60010192915050565b5f60ff821660ff8103615b1357615b1361584e565b5f60208284031215615b41575f5ffd5b815161305981615599565b6001600160801b03818116838216029081169081811461580c5761580c61584e565b5f6001600160801b03831680615b8657615b866159b5565b806001600160801b0384160491505092915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602084019350602083015f5b82811015615be85781516001600160a01b0316865260209586019590910190600101615bc1565b5093949350505050565b828152604060208201525f61395d6040830184615baf565b5f60208284031215615c1a575f5ffd5b815167ffffffffffffffff811115615c30575f5ffd5b8201601f81018413615c40575f5ffd5b805167ffffffffffffffff811115615c5a57615c5a615b9b565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715615c8757615c87615b9b565b604052918252602081840181019290810187841115615ca4575f5ffd5b6020850194505b83851015615cc757845180825260209586019590935001615cab565b509695505050505050565b85815284602082015260a060408201525f615cf060a0830186615baf565b6001600160a01b0394909416606083015250608001529392505050565b5f600160ff1b8201615d2157615d2161584e565b505f0390565b5f8160020b627fffff198103615a7057615a7061584e565b5f82615d4d57615d4d6159b5565b500690565b6001600160a01b0382811682821603908111156134485761344861584e565b5f60208284031215615d81575f5ffd5b815161305981615333565b5f60208284031215615d9c575f5ffd5b613059826156bb565b8181035f83128015838313168383128216171561580c5761580c61584e565b8082025f8212600160ff1b84141615615ddf57615ddf61584e565b81810583148215176134485761344861584e565b8082018281125f831280158216821582161715615e1257615e1261584e565b505092915050565b81516001600160a01b0316815261016081016020830151615e4660208401826001600160a01b03169052565b506040830151615e5d604084018262ffffff169052565b506060830151615e72606084018260020b9052565b506080830151615e87608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151615ece6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f60808587031215615ef1575f5ffd5b84519350615f016020860161589b565b604086015160609096015194979096509250505056fea2646970667358221220c3d452cd018da50b1f0789c224bf9c71c56ee9262ad40769577de0a67970cf0b64736f6c634300081d0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d