0 txs
7 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deposits
viewfunction deposits(uint256) view returns (address owner, uint128 liquidity, address token0, address token1)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
marketTokenIds
viewfunction marketTokenIds(address, uint256) view returns (uint256)
onERC721Received
viewfunction onERC721Received(address, address, uint256, bytes) view returns (bytes4)
permit2
viewfunction permit2() view returns (address)
poolManager
viewfunction poolManager() view returns (address)
positionManager
viewfunction positionManager() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenIdMarket
viewfunction tokenIdMarket(uint256) view returns (address)
ensurePermit2Approvals
nonpayablefunction ensurePermit2Approvals(address[] tokens, uint256[] amounts)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _poolManager, address _positionManager, address _permit2)
mintAndProvideLiquidity
nonpayablefunction mintAndProvideLiquidity(address truthMarket, uint256 paymentTokenAmount)
mintAndProvideLiquidityWithPrice
nonpayablefunction mintAndProvideLiquidityWithPrice(address truthMarket, uint256 paymentTokenAmount, uint256 yesInitialPrice, uint256 singleSidedLiquidityAmount)
removeLiquidity
nonpayablefunction removeLiquidity(uint256 tokenId)
removeMarketLiquidity
nonpayablefunction removeMarketLiquidity(address market)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawAllToken
nonpayablefunction withdrawAllToken(address token, address to)
withdrawToken
nonpayablefunction withdrawToken(address token, uint256 amount, address to)
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
Initialized
event Initialized(uint8 version)
LiquidityRemoved
event LiquidityRemoved(address indexed market, uint256 indexed tokenId)
MarketLiquidityProvided
event MarketLiquidityProvided(address indexed market)
MarketLiquidityRemoved
event MarketLiquidityRemoved(address indexed market)
PositionBurned
event PositionBurned(address indexed market, uint256 indexed tokenId)
PositionCreated
event PositionCreated(address indexed market, uint256 indexed tokenId, uint128 liquidity)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
InvalidLiquidityAmount
error InvalidLiquidityAmount()
InvalidMarket
error InvalidMarket()
InvalidPaymentAmount
error InvalidPaymentAmount()
InvalidPrice
error InvalidPrice()
InvalidPriceRatio
error InvalidPriceRatio()
InvalidRecipient
error InvalidRecipient()
InvalidSlippageTolerance
error InvalidSlippageTolerance()
InvalidTickRange
error InvalidTickRange()
NoLiquidityPositions
error NoLiquidityPositions()
OnlyPositionManager
error OnlyPositionManager()
PoolNotInitialized
error PoolNotInitialized()
TickOutOfBounds
error TickOutOfBounds()
UnsupportedMarketVersion
error UnsupportedMarketVersion()
creation bytecode
0x60a0806040523460d657306080525f549060ff8260081c166084575060ff80821603604b575b604051614c0090816100db8239608051818181611073015281816111cd015261159f0152f35b60ff90811916175f557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a15f6025565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123505750806312261ee714612327578063150b7a0214612296578063248a9ca3146122635780632f2ff15d146121aa57806331c1aa3f146118b257806336568abe1461181f5780633659cfe6146115805780633aeebedb146114b25780633ccdbb28146114435780634f1ef2861461115757806351f8705a1461112357806352d1902d14611060578063791b98bc1461103657806391d1485414610fec5780639c8f9f2314610ea8578063a217fddf14610e8c578063b02c43d014610e1c578063b73178bf14610664578063c0c53b8b146103a4578063d28bb1b21461034c578063d547741f14610305578063dc4c90d3146102db578063f002d74b1461020b5763fbe4bc3714610131575f80fd5b346101dc5760403660031901126101dc5761014a6123a3565b6101526126b0565b6001600160a01b0381169081156101fc5761016c90612869565b156101ed57819061017b6129db565b303b156101ea57604051906331c1aa3f60e01b82526004820152602435602482015260326044820152816064820152818160848183305af180156101df576101c7575b50600160fb5580f35b816101d191612414565b6101dc57805f6101be565b80fd5b6040513d84823e3d90fd5b50fd5b63dec895c360e01b8252600482fd5b639db8d5b160e01b8352600483fd5b50346101dc5760403660031901126101dc576004356001600160401b0381116102d75761023c903690600401612479565b6024356001600160401b0381116102d35761025b903690600401612479565b916102646126b0565b61026c6129db565b8281036102c457845b8181106102855785600160fb5580f35b6102908183876126a0565b35906001600160a01b03821682036102c0576102ba6001926102b38388886126a0565b3590612c90565b01610275565b8680fd5b63512509d360e11b8552600485fd5b8380fd5b5080fd5b50346101dc57806003193601126101dc5761012d546040516001600160a01b039091168152602090f35b50346101dc5760403660031901126101dc576103496004356103256123b9565b9061034461033f825f5260c9602052600160405f20015490565b612814565b6132f3565b80f35b50346101dc5760403660031901126101dc576103666123a3565b6001600160a01b0316815261013160205260408120805460243592908310156101dc5760206103958484612450565b90549060031b1c604051908152f35b50346101dc5760603660031901126101dc576103be6123a3565b6103c66123b9565b6103ce6123cf565b9083549260ff8460081c161593848095610657575b8015610640575b156105e45760ff1981166001178655846105d3575b5061042b60ff865460081c16610414816137bd565b61041d816137bd565b610426816137bd565b6137bd565b600160fb5561012d80546001600160a01b03199081166001600160a01b039384161790915561012e805482169383169390931790925561012f8054909216921691909117905581805260c960209081526040808420335f908152925290205460ff1615610584575b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929825260c960209081526040808420335f908152925290205460ff1615610513575b6104dc5780f35b61ff001981541681557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a180f35b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92980835260c960209081526040808520335f8181529190935220805460ff191660011790559081907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a46104d5565b81805260c960209081526040808420335f8181529190935220805460ff1916600117905580837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4610493565b61ffff19166101011785555f6103ff565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156103ea5750600160ff8216146103ea565b50600160ff8216106103e3565b50346101dc5760203660031901126101dc5761067e6123a3565b6106866126b0565b6001600160a01b0381169081156101fc576106a081612869565b15610e0d576106ad6129db565b8183526101316020526040832080548015610dfe57805b610d8f5750508183526101316020526040832080549084815581610d71575b505060405163a3dd261960e01b8152602081600481865afa90811561090d578491610d36575b506008811015610d225790600784921461074b575b50807f4f0c5005c46eea79c9293cca4153e74cb161eae81f21acac234bac10a92b41fc91a2600160fb5580f35b604051632486d67160e01b8152602081600481875afa9081156108c7578391610ced575b50604051630786cdd960e51b8152602081600481885afa90811561090d578491610cb3575b506040516308d4f88560e11b815291602083600481895afa928315610ca8578593610c68575b506001810361091857506040516370a0823160e01b8152306004820152926001600160a01b039091169150602083602481855afa92831561090d5784936108d2575b508280610854575b505050823b156102d7576040519063db006a7560e01b82526004820152818160248183875af180156101df5761083f575b50505b815f61071e565b8161084991612414565b6102d757815f610835565b60405163095ea7b360e01b81526001600160a01b039290921660048301526024820152906020908290604490829087905af180156108c757610898575b8082610804565b6108b99060203d6020116108c0575b6108b18183612414565b8101906124ca565b505f610891565b503d6108a7565b6040513d85823e3d90fd5b935091506020833d602011610905575b816108ef60209383612414565b8101031261090157849251915f6107fc565b5f80fd5b3d91506108e2565b6040513d86823e3d90fd5b60028103610a495750506040516370a0823160e01b8152306004820152916001600160a01b039190911690602083602481855afa92831561090d578493610a12575b5082806109af575b505050823b156102d7576040519063db006a7560e01b82526004820152818160248183875af180156101df5761099a575b5050610838565b816109a491612414565b6102d757815f610993565b60405163095ea7b360e01b81526001600160a01b039290921660048301526024820152906020908290604490829087905af180156108c7576109f3575b8082610962565b610a0b9060203d6020116108c0576108b18183612414565b505f6109ec565b935091506020833d602011610a41575b81610a2f60209383612414565b8101031261090157849251915f61095a565b3d9150610a22565b60039192945014610a5d575b505050610838565b6040516370a0823160e01b81523060048201526001600160a01b0391909116928590602083602481885afa9283156101df578293610c31575b506040516370a0823160e01b81523060048201526001600160a01b0391909116949092602084602481895afa9384156108c7578394610bfa575b5080610b8b575b50505080610b28575b505050803b156102d757604051633415a4cf60e01b81528290818160048183875af180156101df57610b13575b80610a55565b81610b1d91612414565b6102d757815f610b0d565b60405163095ea7b360e01b81526001600160a01b039290921660048301526024820152906020908290604490829087905af180156108c757610b6c575b8080610ae0565b610b849060203d6020116108c0576108b18183612414565b505f610b65565b60405163095ea7b360e01b81526001600160a01b038616600482015260248101919091529160209183916044918391905af18015610bef57610bd0575b808691610ad7565b610be89060203d6020116108c0576108b18183612414565b505f610bc8565b6040513d88823e3d90fd5b925092506020823d602011610c29575b81610c1760209383612414565b8101031261090157869151925f610ad0565b3d9150610c0a565b915091506020813d602011610c60575b81610c4e60209383612414565b8101031261090157859051915f610a96565b3d9150610c41565b9092506020813d602011610ca0575b81610c8460209383612414565b81010312610c9c57610c95906124a9565b915f6107ba565b8480fd5b3d9150610c77565b6040513d87823e3d90fd5b90506020813d602011610ce5575b81610cce60209383612414565b810103126102d357610cdf906124a9565b5f610794565b3d9150610cc1565b9250506020823d602011610d1a575b81610d0960209383612414565b81010312610901578391515f61076f565b3d9150610cfc565b634e487b7160e01b84526021600452602484fd5b90506020813d602011610d69575b81610d5160209383612414565b810103126102d3575160088110156102d3575f610709565b3d9150610d44565b845260208420908101905b818110156106e357848155600101610d7c565b5f198101818111610dea5790610da8610dd59284612450565b905460039190911b1c80875261013260205260408720546001600160a01b03168614610ddb575b50612694565b806106c4565b610de490613599565b5f610dcf565b634e487b7160e01b86526011600452602486fd5b63d63f379960e01b8552600485fd5b63dec895c360e01b8352600483fd5b50346101dc5760203660031901126101dc57604060809160043581526101306020522060018060a01b03815416906001600160801b036001820154169060018060a01b0360028201541690600360018060a01b039101541691604051938452602084015260408301526060820152f35b50346101dc57806003193601126101dc57602090604051908152f35b50346101dc5760203660031901126101dc57600435610ec56126b0565b610ecd6129db565b610ed681613599565b80825261013260205260408220546001600160a01b03169081610efd575b82600160fb5580f35b8183526101316020526040832091835b835480821015610fe25783610f228387612450565b90549060031b1c14610f375750600101610f0d565b929391925f198101908111610dea5790610f65610f57610f7d9385612450565b90549060031b1c9184612450565b90919082549060031b91821b915f19901b1916179055565b80548015610fce575f190190610f938282612450565b8154905f199060031b1b19169055555b7fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf98401717198380a35f80610ef4565b634e487b7160e01b85526031600452602485fd5b5050909150610fa3565b50346101dc5760403660031901126101dc5760406110086123b9565b91600435815260c9602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346101dc57806003193601126101dc5761012e546040516001600160a01b039091168152602090f35b50346101dc57806003193601126101dc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036110b85760206040515f80516020614bab8339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b50346101dc5760203660031901126101dc5760209060043581526101328252604060018060a01b0391205416604051908152f35b5060403660031901126101dc5761116c6123a3565b602435906001600160401b03821161143f573660238301121561143f578160040135918361119984612435565b916111a76040519384612414565b8483526020830194366024828401011161143f578060246020930187378301015261121f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611201308214156125d2565b5f80516020614bab833981519152546001600160a01b031614612633565b6112276127bd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561125c57506103499150613df5565b6040516352d1902d60e01b81529091906001600160a01b03821690602081600481855afa86918161140b575b506112e95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b5f80516020614bab833981519152036113b45761130582613df5565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2838251158015906113ac575b611341575b5050505080f35b806113a29460405194611355606087612414565b602786527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c6020870152660819985a5b195960ca1b60408701525190845af461139c61496c565b91614b11565b505f80808361133a565b506001611335565b60405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091506020813d602011611437575b8161142760209383612414565b810103126109015751905f611288565b3d915061141a565b8280fd5b50346101dc5760603660031901126101dc5761145d6123a3565b6114656123cf565b61146d6127bd565b6114756129db565b6001600160a01b038116156114a35761149b9160243591906001600160a01b0316613374565b600160fb5580f35b634e46966960e11b8352600483fd5b50346101dc5760403660031901126101dc576114cc6123a3565b6114d46123b9565b906114dd6127bd565b6114e56129db565b6001600160a01b038216156114a3576040516370a0823160e01b81523060048201526001600160a01b039190911691602082602481865afa91821561090d57849261154c575b508161153b575b83600160fb5580f35b61154492613374565b5f8080611532565b9091506020813d602011611578575b8161156860209383612414565b810103126109015751905f61152b565b3d915061155b565b50346101dc5760203660031901126101dc5761159a6123a3565b6115d37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611201308214156125d2565b6115db6127bd565b6020906040516115eb8382612414565b83815282810190601f1984013683377f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156116305750506103499150613df5565b6040516352d1902d60e01b81529192916001600160a01b038316908581600481855afa8791816117f0575b506116bc5760405162461bcd60e51b815260048101879052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b9394937fc9f76b5ec45e5cdef99837d7b6d2467235c1df8933c8ca56df5c35afa2c7d44401611799579085916116f184613df5565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115801590611792575b61172d575b505050505080f35b6117879482917f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60405196611763606089612414565b60278852870152660819985a5b195960ca1b60408701525190845af461139c61496c565b505f80808381611725565b5081611720565b60405162461bcd60e51b815260048101859052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508681813d8311611818575b6118088183612414565b810103126109015751905f61165b565b503d6117fe565b50346101dc5760403660031901126101dc576118396123b9565b336001600160a01b0382160361185557610349906004356132f3565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b5034610901576080366003190112610901576118cc6123a3565b602435604435606435926118de6126b0565b6001600160a01b03811693841561219b576118f882612869565b1561218c576119056129db565b82158015612181575b61217257831561216357604051633013ce2960e01b8152602081600481895afa9081156120ed575f91612129575b506001600160a01b0316936064848103949085116121155761195e83836124bd565b60405163095ea7b360e01b81526001600160a01b0386166004820152602481018290526020816044815f8c5af180156120ed576120f8575b50873b15610901576040519063140e25ad60e31b825260048201525f81602481838c5af180156120ed576120d8575b506040516368c1ff7760e11b815290610140826004818b5afa9384156120cd5789928a9561207e575b5060018060a01b038351169160018060a01b03602085015116978b8b600460018060a01b038a51169b602060018060a01b03818d0151169360405193848092630786cdd960e51b82525afa91821561090d578f90859361203b575b506020600491604051928380926308d4f88560e11b82525afa94851561202f5794611fef575b508d808914988993849a611fdc575b8415611fb4575b5050505015611fa5578b808c149b8c93849d611f92575b8415611f6a575b5050505015611f5b5781611ac88a611ace93611ac2886064978b612a85565b8a612a85565b8661257a565b0480850394808611611f475760405163313ce56760e01b8152998c60208c600481855afa9b8c15611f3a57602060ff8f9e6004938591611f1d575b50169d60405192838092630786cdd960e51b82525afa9081156101df578291611ede575b5060405163313ce56760e01b815290602090829060049082906001600160a01b03165afa9889156101df5760208f9260049b60ff918691611ec1575b5016926040519b8c80926308d4f88560e11b82525afa998a156108c757839a611e82575b5060405163313ce56760e01b8152996020908b9060049082906001600160a01b03165afa80156108c7578f908f9b9060ff918691611e53575b50169a611bd2846125c4565b611bdc908861257a565b611be5826125c4565b611bee9161258d565b96611bf88d6125c4565b611c019161257a565b611c0a826125c4565b611c139161258d565b93611c1d906125c4565b611c27908a61257a565b90611c31906125c4565b611c3a9161258d565b9e8f9b611c46906125c4565b611c50908a61257a565b90611c5a906125c4565b611c639161258d565b9a611c6e90876124bd565b95611c798c856124bd565b96611c84848a6124bd565b90604051630786cdd960e51b81528080865a92600491602094fa908115611e48578891611dfd575b5093611cbc602092600496612c90565b6040516308d4f88560e11b815294859182905afa968715610bef578f988f988e958991611d97575b50611d189593611d2f9c93611cfe8d9794611d0394612c90565b612c90565b8c15611d9057815b8d15611d81575090612f09565b8c15611d895780925b508c15611d81575090612f09565b611d62575b88887f2f9eb3607e1ab9527e84637029cbf03ef11854f6342d9be56434e8f8ea66a9138280a2600160fb5580f35b84611d7092611d75986130b4565b6130b4565b5f808080808080611d34565b905090612f09565b8192611d21565b8091611d0b565b9395505097509197506020813d602011611df5575b81611db960209383612414565b81010312611df157611d2f988f988f98611d18958f9495611cfe611d0393611de18f996124a9565b945094975050939c509395611ce4565b8580fd5b3d9150611dac565b9490506020853d602011611e40575b81611e1960209383612414565b81010312611e3c57611cbc602092611e326004976124a9565b9296509250611cac565b8780fd5b3d9150611e0c565b6040513d8a823e3d90fd5b611e75915060203d602011611e7b575b611e6d8183612414565b8101906125ab565b5f611bc6565b503d611e63565b995060208a3d602011611eb9575b81611e9d60209383612414565b8101031261143f576020611eb260049b6124a9565b9a50611b8d565b3d9150611e90565b611ed89150833d8511611e7b57611e6d8183612414565b5f611b69565b90506020813d602011611f15575b81611ef960209383612414565b810103126102d7576020611f0e6004926124a9565b9150611b2d565b3d9150611eec565b611f349150833d8511611e7b57611e6d8183612414565b5f611b09565b50604051903d90823e3d90fd5b634e487b7160e01b8c52601160045260248cfd5b639db8d5b160e01b8c5260048cfd5b6001600160a01b03161492509082611f88575b50505f8b8180611aa3565b1490508a5f611f7d565b6001600160a01b03811684149450611a9c565b639db8d5b160e01b8e5260048efd5b6001600160a01b03161492509082611fd2575b50505f8d8180611a85565b1490508c5f611fc7565b6001600160a01b03811684149450611a7e565b9093506020813d602011612027575b8161200b60209383612414565b810103126120235761201c906124a9565b925f611a6f565b8f80fd5b3d9150611ffe565b604051903d90823e3d90fd5b9250506020823d602011612076575b8161205760209383612414565b810103126102d35760048f9261206e6020916124a9565b939150611a49565b3d915061204a565b925093506101403d81116120c6575b6120978184612414565b8201610140838203126120c2578060a06120b46120bb93866124f0565b94016124f0565b935f6119ee565b8980fd5b503d61208d565b6040513d8b823e3d90fd5b6120e59198505f90612414565b5f965f6119c5565b6040513d5f823e3d90fd5b6121109060203d6020116108c0576108b18183612414565b611996565b634e487b7160e01b5f52601160045260245ffd5b90506020813d60201161215b575b8161214460209383612414565b8101031261090157612155906124a9565b5f61193c565b3d9150612137565b637e2897ef60e11b5f5260045ffd5b63e598f05760e01b5f5260045ffd5b50606483101561190e565b63dec895c360e01b5f5260045ffd5b639db8d5b160e01b5f5260045ffd5b34610901576040366003190112610901576004356121c66123b9565b906121e061033f825f5260c9602052600160405f20015490565b805f5260c960205260405f2060018060a01b0383165f5260205260ff60405f2054161561220957005b5f81815260c9602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4005b3461090157602036600319011261090157602061228e6004355f5260c9602052600160405f20015490565b604051908152f35b34610901576080366003190112610901576122af6123a3565b506122b86123b9565b506064356001600160401b03811161090157366023820112156109015780600401356001600160401b03811161090157369101602401116109015761012e546001600160a01b0316330361231857604051630a85bd0160e11b8152602090f35b637b7524c960e01b5f5260045ffd5b34610901575f3660031901126109015761012f546040516001600160a01b039091168152602090f35b34610901576020366003190112610901576004359063ffffffff60e01b821680920361090157602091637965db0b60e01b8114908115612392575b5015158152f35b6301ffc9a760e01b1490508361238b565b600435906001600160a01b038216820361090157565b602435906001600160a01b038216820361090157565b604435906001600160a01b038216820361090157565b608081019081106001600160401b0382111761240057604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761240057604052565b6001600160401b03811161240057601f01601f191660200190565b8054821015612465575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b9181601f84011215610901578235916001600160401b038311610901576020808501948460051b01011161090157565b51906001600160a01b038216820361090157565b9190820180921161211557565b90816020910312610901575180151581036109015790565b51908160020b820361090157565b91908260a09103126109015760405160a081018181106001600160401b03821117612400576040528092612523816124a9565b8252612531602082016124a9565b602083015260408101519062ffffff8216820361090157608091604084015261255c606082016124e2565b60608401520151906001600160a01b03821682036109015760800152565b8181029291811591840414171561211557565b8115612597570490565b634e487b7160e01b5f52601260045260245ffd5b90816020910312610901575160ff811681036109015790565b604d811161211557600a0a90565b156125d957565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561263a57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b8015612115575f190190565b91908110156124655760051b0190565b335f9081527fc99cfc74cbb51adc7ca8731c432a51a31a086a1789003f0b773be6e802362bf4602052604090205460ff16156126e857565b6127b9602061279960116126fb33613e8c565b6037846127277f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929613f73565b6040519687947f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000828701528051918291018587015e8401907001034b99036b4b9b9b4b733903937b6329607d1b84830152805192839101604883015e01015f838201520301601f198101835282612414565b60405162461bcd60e51b81526020600482015291829160248301906134e7565b0390fd5b335f9081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756602052604090205460ff16156127f557565b6127b96020612799601161280833613e8c565b6037846127275f613f73565b5f81815260c96020908152604080832033845290915290205460ff16156128385750565b602061279960116127b99360378461272761285233613e8c565b93613f73565b908151811015612465570160200190565b6040516001621794a360e21b03198152905f90829060049082906001600160a01b03165afa5f9181612960575b506128a057505f90565b8051906003821015918261293c575b5081612915575b816128eb575b816128c5575090565b80915051600210156124655760220151603960f81b6001600160f81b0319909116111590565b8091505160021015612465576022810151600360fc1b6001600160f81b03199091161015906128bc565b80915051600110156124655760218101516001600160f81b031916601760f91b14906128b6565b909150156124655760208101516001600160f81b031916601960f91b14905f6128af565b9091503d805f833e6129728183612414565b810190602081830312610901578051906001600160401b038211610901570181601f82011215610901578051906129a882612435565b926129b66040519485612414565b8284526020838301011161090157815f9260208093018386015e83010152905f612896565b600260fb54146129ec57600260fb55565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b60ff16604d811161211557600a0a90565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b61012d5460a082206001600160a01b03909116935f939091612aa7908661381d565b5050506001600160a01b0316612c7657825160208085015160405163313ce56760e01b8152946001600160a01b039182169390929186916004918391165afa9182156120ed576004945f93612c54575b506020906040519586809263313ce56760e01b82525afa9384156120ed575f94612c33575b5015612c0f576064612b3b8693612b35612b4294612a31565b9061257a565b0492612a31565b90612bfb57905b81158015612bf3575b612be55760209284612b9a93612b7c612b7760c49560018060a01b039360c01b61258d565b61400c565b1696604051978895869463313b65df60e11b86526004860190612a42565b60a48401525af18015611f3a57612baf575050565b6020823d602011612bdd575b81612bc860209383612414565b810103126101dc5750612bda906124e2565b50565b3d9150612bbb565b62bfc92160e01b8452600484fd5b508015612b52565b634e487b7160e01b84526011600452602484fd5b6064919450612c20612c2c91612a31565b94612b355f9694612a31565b0490612b49565b612c4d91945060203d602011611e7b57611e6d8183612414565b925f612b1c565b6020919350612c6f90823d8411611e7b57611e6d8183612414565b9290612af7565b5050505050565b519065ffffffffffff8216820361090157565b61012f54604051636eb1769f60e11b81523060048201526001600160a01b03918216602482018190529183169291602082604481875afa80156120ed5785925f91612ed3575b508211612e72575b505061012f5461012e5460405163927da10560e01b81523060048201526001600160a01b03938416602482015290831660448201819052929091169390606081606481885afa9081156120ed5782905f905f93612e12575b506001600160a01b031610908115612df4575b50612d55575b50505050565b6001600160a01b03811115612de557506001600160a01b03925b6201518042019283421161211557813b15610901575f60849265ffffffffffff829660405198899788966387517c4560e01b88526004880152602487015260018060a01b031660448601521660648401525af180156120ed57612dd5575b808080612d4f565b5f612ddf91612414565b5f612dcd565b6001600160a01b031692612d6f565b9050610e104201908142116121155765ffffffffffff16105f612d49565b925050506060813d606011612e6a575b81612e2f60609383612414565b810103126109015780516001600160a01b0381168103610901578290612e636040612e5c60208601612c7d565b9401612c7d565b505f612d36565b3d9150612e22565b60405163095ea7b360e01b81526001600160a01b0391909116600482015260248101919091526020816044815f875af180156120ed57612eb4575b8390612cde565b612ecc9060203d6020116108c0576108b18183612414565b505f612ead565b9250506020823d602011612f01575b81612eef60209383612414565b81010312610901578480925190612cd6565b3d9150612ee2565b929190926060820193845160020b90612f2682620d89e71961307b565b82156125975782620d89e7190760020b613019575b95612f4983612fa79861309d565b92620d89e7198460020b12612ffd575b620d89e88460020b13612fe7575b505160020b92612f8384612f7e81620d89e861307b565b61309d565b93620d89e7198560020b12612fc1575b620d89e88560020b13612fab575b5061397e565b5050565b612fba919450612f7e8161306a565b925f612fa1565b9350612fe184612f7e81612fdc612fd782613031565b61304f565b61307b565b93612f93565b612ff6919350612f7e8161306a565b915f612f67565b925061301383612f7e81612fdc612fd782613031565b92612f59565b60020b95627fffff19871461211557955f1901612f3b565b60020b620d89e7190190627fffff198212627fffff83131761211557565b60020b5f190190627fffff198212627fffff83131761211557565b60020b801561259757620d89e80590565b60020b9060020b90811561259757627fffff1981145f19831416612115570590565b9060020b9060020b02908160020b91820361211557565b928315612d4f57815160208301516001600160a01b03908116911682156132ec57815b83156132e45750905b6060840191825160020b916040519260408401908482106001600160401b03831117612400576040919091525f808552602085019081529261314391906001600160a01b03808216908516106132d65761313d82620d89e86138d6565b9361447e565b60020b9060020b8181125f146132cc57835281525b61012d5460a08620613172916001600160a01b031661381d565b509095916001600160a01b03161590506132bd571561327357505160020b91815160020b9060020b03627fffff8113627fffff19821217612115576131bf6131fa91835160020b906138d6565b916131ef6131e36131d85f99965b845160020b9061307b565b835160020b9061309d565b93825160020b9061307b565b905160020b9061309d565b918260020b8260020b8181121561326557620d89e7198112908115613258575b5061323c57620d89e719811290811561324b575b5061323c57612fa79561397e565b633e1f710360e21b5f5260045ffd5b620d89e89150135f61322e565b620d89e89150135f61321a565b6264847d60e41b5f5260045ffd5b9290508195915160020b9060020b01627fffff198112627fffff821317612115576132a66131fa91875160020b906138d6565b925160020b91956131ef6131e36131d85f966131cd565b63486aa30760e01b5f5260045ffd5b9083528152613158565b61313d82620d89e7196138d6565b9050906130e0565b80916130d7565b805f5260c960205260405f2060018060a01b0383165f5260205260ff60405f20541661331d575050565b5f81815260c9602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4565b60405163a9059cbb60e01b602082019081526001600160a01b039390931660248201526044808201949094529283526134089291905f9081906133b8606486612414565b60018060a01b031692604051946133d0604087612414565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af161139c61496c565b8051908115918215613476575b50501561341e57565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b61348992506020809183010191016124ca565b5f80613415565b604051606091906134a18382612414565b6002815291601f1901825f5b8281106134b957505050565b8060606020809385010152016134ad565b8051156124655760200190565b8051600110156124655760400190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9061351e906040835260408301906134e7565b906020818303910152815180825260208201916020808360051b8301019401925f915b83831061355057505050505090565b909192939460208061356e600193601f1986820301875289516134e7565b97019301930191939290613541565b9291906135946020916040865260408601906134e7565b930152565b604051600360f81b6020820152601160f81b6021820152600281526135bf602282612414565b5f90825f5261013060205260405f206040516135da816123e5565b81546001600160a01b03908116825260018301546001600160801b03166020830152600283015481166040830190815260039093015416606090910190815261369c613624613490565b926040518760208201525f60408201525f60608201526080808201525f60a082015260a0815261365560c082612414565b61365e856134ca565b52613668846134ca565b50519151604080516001600160a01b0394851660208201529390911690830152306060808401919091528252608082612414565b6136a5826134d7565b526136af816134d7565b50603c4201804211612115576136eb60018060a01b0361012e5416936136dd6040519485926020840161350b565b03601f198101845283612414565b823b1561090157613715925f928360405180968195829463dd46508f60e01b84526004840161357d565b03925af180156120ed576137aa575b5081815261013260205260018060a01b0360408220541690828152610130602052806003604082208281558260018201558260028201550155828152610132602052604081206001600160601b0360a01b81541690558161378457505050565b807fed74d7b7c481ed25046eda5ec37f1b67b45270d8db43f82d1d85c3b04933bb5491a3565b6137b691505f90612414565b5f80613724565b156137c457565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b91906020906040518281019182526006604082015260408152613841606082612414565b519020604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa9182156120ed575f926138a2575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d6020116138ce575b816138be60209383612414565b810103126109015751905f61387a565b3d91506138b1565b816138e1818361307b565b9160020b5f81129081613964575b5061394c575b6138fe9161309d565b90620d89e7198260020b12613930575b620d89e88260020b1361391f575090565b61392d9150612f7e8161306a565b90565b905061394681612f7e81612fdc612fd782613031565b9061390e565b5060020b627fffff198114612115575f1901816138f5565b91905060020b80156125975783910760020b15155f6138ef565b959391929490945f871580613ded575b613dde57835160208501805161012d5460a088206001600160a01b03928316989483169794926139be921661381d565b5050506001600160a01b0381169081156132bd578c906139dd8b614151565b8d6139e78a614151565b9283836001600160a01b0380831690821611613dd3575b50506001600160a01b0383168611613d70575050613a1c935061491f565b975b889a612742908d8281029e8f048314901517156121155781810291818304149015171561211557604051600160f91b6020820152600d60f81b6021820152600281529c613a6c60228f612414565b613a74613490565b9a6001600160801b0316976040519360208501613a919087612a42565b60020b60c085015260020b60e08401528761010084015261271090046001600160801b031661012083015261271090046001600160801b031661014082015230610160820152610180810161018090526101a081015f90526101a08152613afa6101c082612414565b613b03896134ca565b52613b0d886134ca565b50519051604080516001600160a01b03938416602082015292909116828201528152613b3a606082612414565b613b43876134d7565b52613b4d866134d7565b5061012e54604051631d5e528f60e21b8152966001600160a01b03909116908780835a92600491602094fa9788156120ed575f98613d3c575b50879a603c42019081421161211557613bab906136dd6040519485926020840161350b565b823b1561090157613bd5925f928360405180968195829463dd46508f60e01b84526004840161357d565b03925af180156120ed57613d27575b506001600160a01b03168082526101316020526040822080549068010000000000000000821015613d1357604092613c2d89610f65858295600160039d9c9b9a98018155612450565b818352610132602052838320816001600160601b0360a01b8254161790557fa0528c820d2e814dd0217a9ed9c8eb103a0b8d34b5f7065d4e7754126cc4c05660208551878152a3815196613c80886123e5565b308852602080890194855283890195865260608901968752908252610130905220945185546001600160a01b03199081166001600160a01b0392831617875591516001870180546fffffffffffffffffffffffffffffffff19166001600160801b039290921691909117905591516002860180548316918416919091179055915192909301805490911691909216179055565b634e487b7160e01b84526041600452602484fd5b613d349192505f90612414565b5f905f613be4565b9097506020813d602011613d68575b81613d5860209383612414565b810103126109015751965f613b86565b3d9150613d4b565b919490939192906001600160a01b0382161115613dc7578291613d9791613d9d959461491f565b936148e5565b6001600160801b0381166001600160801b038316105f14613dc057505b97613a1e565b9050613dba565b915050613dba926148e5565b945092505f806139fe565b631f2c4df760e11b5f5260045ffd5b50861561398e565b803b15613e315760018060a01b03166001600160601b0360a01b5f80516020614bab8339815191525416175f80516020614bab83398151915255565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b613e96602a612435565b90613ea46040519283612414565b602a8252613eb2602a612435565b6020830190601f19013682378251156124655760309053815160011015612465576078602183015360295b60018111613f315750613eed5790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b90600f811690601082101561246557613f6e916f181899199a1a9b1b9c1cb0b131b232b360811b901a613f648486612858565b5360041c91612694565b613edd565b613f7d6042612435565b90613f8b6040519283612414565b60428252613f996042612435565b6020830190601f19013682378251156124655760309053815160011015612465576078602183015360415b60018111613fd45750613eed5790565b90600f811690601082101561246557614007916f181899199a1a9b1b9c1cb0b131b232b360811b901a613f648486612858565b613fc4565b801561414c576140da6001825f908460801c80614140575b508060401c80614133575b508060201c80614126575b508060101c80614119575b508060081c8061410c575b508060041c806140ff575b508060021c806140f2575b50821c6140eb575b811c1b61407b818461258d565b0160011c614089818461258d565b0160011c614097818461258d565b0160011c6140a5818461258d565b0160011c6140b3818461258d565b0160011c6140c1818461258d565b0160011c6140cf818461258d565b0160011c809261258d565b808210156140e6575090565b905090565b810161406e565b600291509101905f614066565b600491509101905f61405b565b600891509101905f614050565b601091509101905f614045565b602091509101905f61403a565b604091509101905f61402f565b9150506080905f614024565b505f90565b60020b908160ff1d82810118620d89e8811161446b5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b18916002811661444f575b60048116614433575b60088116614417575b601081166143fb575b602081166143df575b604081166143c3575b608081166143a7575b610100811661438b575b610200811661436f575b6104008116614353575b6108008116614337575b611000811661431b575b61200081166142ff575b61400081166142e3575b61800081166142c7575b6201000081166142ab575b620200008116614290575b620400008116614275575b620800001661425c575b5f12614254575b0160201c90565b5f190461424d565b6b048a170391f7dc42444e8fa290910260801c90614246565b6d2216e584f5fa1ea926041bedfe9890920260801c9161423c565b916e5d6af8dedb81196699c329225ee6040260801c91614231565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91614226565b916f31be135f97d08fd981231505542fcfa60260801c9161421b565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614211565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91614207565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916141fd565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916141f3565b916ff3392b0822b70005940c7a398e4b70f30260801c916141e9565b916ff987a7253ac413176f2b074cf7815e540260801c916141df565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916141d5565b916ffe5dee046a99a2a811c461f1969c30530260801c916141cb565b916fff2ea16466c96a3843ec78b326b528610260801c916141c2565b916fff973b41fa98c081472e6896dfb254c00260801c916141b9565b916fffcb9843d60f6159c9db58835c9266440260801c916141b0565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916141a7565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161419e565b916ffff97272373d413259a46990580e213a0260801c91614195565b826345c3193d60e11b5f5260045260245ffd5b60405163313ce56760e01b81525f93926001600160a01b039283169216602082600481865afa9182156120ed575f926148c4575b5060405163313ce56760e01b815292602084600481855afa9384156120ed575f946148a3575b5010614887576144e790612a31565b6144f2849192612a31565b90612bfb57905b6001600160401b03811115614877578060401c906001820180921161486357916145368261452d612b779461453c9661258d565b60c01b9261258d565b9061258d565b6001600160a01b038116929073fffd8963efd1fc6a506488495d951d5263988d26841061456e5750505050620d89e890565b6401000276a38411156148575773fffd8963efd1fc6a506488495d951d51639616826401000276a21985016001600160a01b0316116148435760201b640100000000600160c01b031680801561143f5760ff826001600160801b031060071b83811c6001600160401b031060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c821060031b177f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be85831c1c601f161a17169160808310155f146148375750607e1982011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c6780000000000000001690607f190160401b1717171717171717171717171717693627a301d71055774c85026f028f6481ab7f045a5af012a19d003aa919810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f149461392d9561481157505090506138d6565b6001600160a01b0361482285614151565b1611905061483057506138d6565b90506138d6565b905081607f031b61464e565b6318521d4960e21b82526004849052602482fd5b50505050620d89e71990565b634e487b7160e01b85526011600452602485fd5b61453c91612b779160c01b61258d565b925061489290612a31565b5f9261489d90612a31565b906144f9565b6148bd91945060203d602011611e7b57611e6d8183612414565b925f6144d8565b6148de91925060203d602011611e7b57611e6d8183612414565b905f6144b2565b61392d926149149290916001600160a01b0380831690821611614919575b90036001600160a01b03169061499b565b614aee565b90614903565b61392d92614914929091906001600160a01b0380821690831611614966575b6149546001600160a01b03828116908416614a25565b9190036001600160a01b031691614a6e565b9061493e565b3d15614996573d9061497d82612435565b9161498b6040519384612414565b82523d5f602084013e565b606090565b90606082901b905f19600160601b8409928280851094039380850394858411156109015714614a1e578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b11156109015714614a6557600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f19818509938380861095039480860395868511156109015714614ae6579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b906001600160801b038216809203614b0257565b6393dafdf160e01b5f5260045ffd5b91929015614b735750815115614b25575090565b3b15614b2e5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015614b865750805190602001fd5b60405162461bcd60e51b8152602060048201529081906127b99060248301906134e756fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220b030f9191f951576352277e931084bdbbcf3db7ffd77375d9452320f8798e34564736f6c634300081a0033