0 txs
3.96m calls
constructor
constructor()
functions
fees
viewfunction fees(uint8 feeIndex) view returns (bytes32 name, uint64 minLevPos, uint64 oracleFee, uint16 liqFeeP)
feesCount
viewfunction feesCount() view returns (uint8)
getAllPairsMaxLeverage
viewfunction getAllPairsMaxLeverage() view returns (uint32[])
getFeedInfo
viewfunction getFeedInfo(uint16 pairIndex) view returns (bytes32, uint32)
getPairsMaxLeverage
viewfunction getPairsMaxLeverage(uint256 startId, uint256 finalId) view returns (uint32[])
groupCollateral
viewfunction groupCollateral(uint16 _pairIndex, bool _long) view returns (uint256)
groupMaxCollateral
viewfunction groupMaxCollateral(uint16 _pairIndex) view returns (uint256)
groups
viewfunction groups(uint8 groupIndex) view returns (bytes32 name, uint32 maxLeverage, uint16 minLeverage, uint16 maxCollateralP)
groupsCollaterals
viewfunction groupsCollaterals(uint8 groupIndex, uint256) view returns (uint256)
groupsCount
viewfunction groupsCount() view returns (uint8)
isPairIndexListed
viewfunction isPairIndexListed(uint16 pairIndex) view returns (bool)
isPairListed
viewfunction isPairListed(bytes32 fromPair, bytes32 toPair) view returns (bool)
oracle
viewfunction oracle(uint16 pairIndex) view returns (string)
pairFeed
viewfunction pairFeed(uint16 _pairIndex) view returns (bytes32)
pairLiquidationFeeP
viewfunction pairLiquidationFeeP(uint16 _pairIndex) view returns (uint16)
pairMaxLeverage
viewfunction pairMaxLeverage(uint16 _pairIndex) view returns (uint32)
pairMinLeverage
viewfunction pairMinLeverage(uint16 _pairIndex) view returns (uint16)
pairMinLevPos
viewfunction pairMinLevPos(uint16 _pairIndex) view returns (uint64)
pairOracleFee
viewfunction pairOracleFee(uint16 _pairIndex) view returns (uint64)
pairOvernightMaxLeverage
viewfunction pairOvernightMaxLeverage(uint16 _pairIndex) view returns (uint32)
pairs
viewfunction pairs(uint16 pairIndex) view returns (bytes32 from, bytes32 to, bytes32 feed, uint64 tradeSizeRef, uint32 overnightMaxLeverage, uint32 maxLeverage, uint8 groupIndex, uint8 feeIndex, string oracle)
pairsBackend
viewfunction pairsBackend(uint16 _index) view returns (tuple, tuple, tuple)
pairsCount
viewfunction pairsCount() view returns (uint16)
registry
viewfunction registry() view returns (address)
addFee
nonpayablefunction addFee(tuple _fee)
addGroup
nonpayablefunction addGroup(tuple _group)
addPair
nonpayablefunction addPair(tuple _pair)
addPairs
nonpayablefunction addPairs(tuple[] _pairs)
initialize
nonpayablefunction initialize(address _registry)
initializeV2
nonpayablefunction initializeV2(uint16[] indices, uint32[] overnightMaxLeverages)
removePair
nonpayablefunction removePair(uint16 _pairIndex)
setPairMaxLeverage
nonpayablefunction setPairMaxLeverage(uint16 pairIndex, uint32 maxLeverage)
setPairMaxLeverageArray
nonpayablefunction setPairMaxLeverageArray(uint16[] indices, uint32[] values)
setPairOvernightMaxLeverage
nonpayablefunction setPairOvernightMaxLeverage(uint16 pairIndex, uint32 overnightMaxLeverage)
setPairOvernightMaxLeverageArray
nonpayablefunction setPairOvernightMaxLeverageArray(uint16[] indices, uint32[] values)
updateFee
nonpayablefunction updateFee(uint8 _id, tuple _fee)
updateGroup
nonpayablefunction updateGroup(uint8 _id, tuple _group)
updateGroupCollateral
nonpayablefunction updateGroupCollateral(uint16 _pairIndex, uint256 _amount, bool _long, bool _increase)
updatePair
nonpayablefunction updatePair(uint16 _pairIndex, tuple _pair)
events
FeeAdded
event FeeAdded(uint8 index, bytes32 name)
FeeUpdated
event FeeUpdated(uint8 indexed index)
GroupAdded
event GroupAdded(uint8 index, bytes32 name)
GroupUpdated
event GroupUpdated(uint8 indexed index)
Initialized
event Initialized(uint64 version)
PairAdded
event PairAdded(uint16 index, bytes32 from, bytes32 to)
PairFeedUpdated
event PairFeedUpdated(uint16 indexed pairIndex, bytes32 feed)
PairMaxLeverageUpdated
event PairMaxLeverageUpdated(uint16 indexed pairIndex, uint32 maxLeverage)
PairOvernightMaxLeverageUpdated
event PairOvernightMaxLeverageUpdated(uint16 indexed pairIndex, uint32 overnightMaxLeverage)
PairRemoved
event PairRemoved(uint16 index, bytes32 from, bytes32 to)
PairUpdated
event PairUpdated(uint16 indexed index)
errors
FeeNotListed
error FeeNotListed(uint256 index)
GroupNotListed
error GroupNotListed(uint256 index)
InvalidInitialization
error InvalidInitialization()
MaxReached
error MaxReached()
NotAuthorized
error NotAuthorized(address a)
NotGov
error NotGov(address a)
NotInitializing
error NotInitializing()
NotManager
error NotManager(address a)
PairAlreadyListed
error PairAlreadyListed(bytes32 from, bytes32 to)
PairNotEmpty
error PairNotEmpty()
PairNotListed
error PairNotListed(uint256 index)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
WrongParams
error WrongParams()
creation bytecode
0x608080604052346100b9577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100aa57506001600160401b036002600160401b031982821601610065575b6040516130319081620000bf8239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610055565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630616dbc4146128005780630801536e146127c15780630bdf25df146127905780630d3cd59f1461274f57806313137795146124cb5780631445b362146123645780632480d9ab1461224b5780632df2c6f9146120ed578063357c13541461208e5780633679541914611def57806337edb13814611d92578063389275b714611b735780634424863414611b2a5780635b2f571c146119dd5780635cdfa1751461198c57806362f5dc681461186b578063641bc37a14611831578063658de48a1461180d5780636c1ce0cb14611428578063734c1001146112c757806375d42858146110c15780637b10399914611098578063885e27501461107457806389343f7c14610cc6578063906838fe14610b8e57806390b3353914610b56578063a0df490914610acd578063acfd174114610883578063b05c74b51461076f578063b52244071461071f578063b81b2b71146106fa578063baceb0091461069f578063c2b10883146105e9578063c4d66de81461049b578063d1aa34d314610449578063d9df69f2146103f1578063daf84c9f14610377578063e6587a86146103195763e958d489146101c957600080fd5b346102d4576020806003193601126102d45761ffff806101e761284c565b166000526001825260ff60036040600020015460801c166000526002825260016040600020015460301c1660018060a01b0390602483836000541660405192838092630d2020dd60e01b8252641d985d5b1d60da1b60048301525afa80156102e05784916000916102ec575b5060046040518095819363ce845d1d60e01b8352165afa9182156102e0576000926102ac575b508181029181830414901517156102965761271060405191048152f35b634e487b7160e01b600052601160045260246000fd5b9091508281813d83116102d9575b6102c48183612a2e565b810103126102d457519038610279565b600080fd5b503d6102ba565b6040513d6000823e3d90fd5b61030c9150823d8411610312575b6103048183612a2e565b810190612cb3565b38610253565b503d6102fa565b346102d45760203660031901126102d45760ff610334612945565b166000526002602052608060406000206001815491015461ffff9060405192835263ffffffff81166020840152818160201c16604084015260301c166060820152f35b346102d45760403660031901126102d45761039061284c565b6024359081151582036102d45760209161ffff6103da92166000526001835260ff60036040600020015460801c16600052600483526040600020906000146103e957600090612997565b90549060031b1c604051908152f35b600190612997565b346102d45760203660031901126102d45761ffff61040d61284c565b16600052600160205260ff60036040600020015460881c16600052600360205260206001600160401b0360016040600020015416604051908152f35b346102d45760203660031901126102d457602061ffff8061046861284c565b166000526001825260ff60036040600020015460881c166000526003825260016040600020015460801c16604051908152f35b346102d45760203660031901126102d4576004356001600160a01b038116908190036102d4577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c1615916001600160401b038116801590816105e1575b60011490816105d7575b1590816105ce575b506105bc5767ffffffffffffffff19811660011784558261059d575b50801561058b57600080546001600160a01b03191691909117905561055157005b805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b604051635863f78960e01b8152600490fd5b68ffffffffffffffffff19166801000000000000000117835583610530565b60405163f92ee8a960e01b8152600490fd5b90501585610514565b303b15915061050c565b849150610502565b346102d45760203660031901126102d45761ffff61060561284c565b166000526001602052604060002080549061069b60018201549160028101549360ff600383015461063d600463ffffffff9501612a4f565b93604051978897610120958952602089015260408801526001600160401b0382166060880152808260401c1660808801528160601c1660a0870152818160801c1660c087015260881c1660e08501528061010085015283019061285d565b0390f35b346102d45760203660031901126102d45761ffff6106bb61284c565b16600052600160205260ff60036040600020015460881c16600052600360205260206001600160401b0360016040600020015460401c16604051908152f35b346102d45760003660031901126102d457602061ffff60005460a01c16604051908152f35b346102d45760403660031901126102d457610738612945565b60ff60243591166000526004602052604060002060028210156102d45760209161076191612997565b90546040519160031b1c8152f35b346102d45761077d3661289d565b90610786612f1a565b61078f81612ee4565b61ffff8091169182600052600160205260406000209163ffffffff9081831691620186a08311918215610844575b50811561081f575b5061058b5761081660209260037ffb693a840da2c82bf8745bfbd3a11f333cab1df44bfb799d781b4f0fdb9fa7cf95019081549063ffffffff60601b9060601b169063ffffffff60601b1916179055565b604051908152a2005b821515915081610831575b50856107c5565b9050600384015460401c1681108561082a565b9091508215159081610859575b5090866107bd565b905060ff600386015460801c16600052600260205260016040600020015460201c16821086610851565b346102d45760803660031901126102d45761089c61284c565b60249081359060443580151581036102d4576064359182151583036102d4576108c481612ee4565b600054604051630d2020dd60e01b8082526863616c6c6261636b7360b81b600483015260209290916001600160a01b039182169084818b81855afa9081156102e05785918491600091610ab0575b50163314159384610a55575b50505050610a3e5761ffff600492166000526001815260ff60036040600020015460801c1660005252604060002090600014610a355760ff60005b1691156109b0579061096a91612997565b9080548260031b1c92830180931161099b576109999350919082549060031b91821b91600019901b1916179055565b005b83634e487b7160e01b60005260116004526000fd5b919092816109be8585612997565b90549060031b1c11600014610a24576109d78484612997565b90549060031b1c918203918211610a105750610999926109f79192612997565b90919082549060031b91821b91600019901b1916179055565b634e487b7160e01b60009081526011600452fd5b50506109f761099992600092612997565b60ff6001610959565b604051634a0bfec160e01b81523360048201528690fd5b9091929350896040518094819382526674726164696e6760c81b60048301525afa9081156102e057600091610a93575b50163314158780838161091e565b610aaa9150833d8511610312576103048183612a2e565b88610a85565b610ac79150833d8511610312576103048183612a2e565b8c610912565b346102d45760403660031901126102d45760243561ffff90610af58260005460a01c16612c6d565b91610b01600435612fcd565b81610b0b84612fcd565b16828216908111610b4857610b4082610b0b9263ffffffff610b37610b308897612af4565b928a612c9f565b91169052612cd2565b915050610b01565b6040518061069b8782612955565b346102d45760203660031901126102d45761ffff610b7261284c565b1660005260016020526020600260406000200154604051908152f35b346102d45760a03660031901126102d457610ba7612945565b60803660231901126102d457610bbb612ce5565b610bc481612d5c565b604435906001600160401b03918281168091036102d457158015610cae575b8015610c9a575b8015610c82575b61058b5760ff1690816000526003602052600160406000206024358155019080610c19612bb5565b1682549060643592831683036102d45761ffff60801b610c37612bf0565b60801b16926001600160401b0360401b9060401b169160018060901b03191617171790557f3417887ae5fbc941092ff601511bc0f4e3f14ae835bb881189b4c8148c651269600080a2005b506064358281168091036102d4576298968010610bf1565b506064358281168091036102d45715610bea565b5060843561ffff81168091036102d457606410610be3565b346102d457600319602036820181136102d457600435906001600160401b03928383116102d457610120836004019184360301126102d457610d06612ce5565b60c4830191610d1c610d1784612b41565b612f91565b60e4840192610d32610d2d85612b41565b612d5c565b610d3b83612d8e565b61ffff948560005460a01c169386851461106257803595866000526005855260406000209560248401359687600052865260ff604060002054166110445760005260019384865260406000209188835587868401556044850135600284015560038301918b60648701610dad90612bcb565b845467ffffffffffffffff19169116178355610dcb60848701612b4f565b610dd59084612b60565b610de160a48701612b4f565b835463ffffffff60601b191660609190911b63ffffffff60601b16178355610e0890612b41565b825460ff60801b191660809190911b60ff60801b16178255610e2990612b41565b815460ff60881b191660889190911b60ff60881b161790556004019161010401610e5291612b83565b97881161102e57610e6382546129bd565b601f8111610fe5575b50600090601f8911600114610f5f579780917f797331683c7d888af91e5c6800626a01b5f1f7337a712c6915baa1b39c138a09979899600092610f54575b5050600019600383901b1c191690831b1790555b84600052600582526040600020836000528252600660406000209260ff199383858254161790558760005460a01c1660005252604060002091825416179055600054938460a01c1692610f2c604051928392868460409194939261ffff606083019616825260208201520152565b0390a161ffff60a01b90610f3f90612cd2565b60a01b1661ffff60a01b199190911617600055005b013590508980610eaa565b601f1989169183600052856000209260005b818110610fd05750918593918b7f797331683c7d888af91e5c6800626a01b5f1f7337a712c6915baa1b39c138a099a9b9c9410610fb6575b505050811b019055610ebe565b0135600019600384901b60f8161c19169055898080610fa9565b83830135855593860193918701918701610f71565b8260005284600020601f8a0160051c810191868b10611024575b601f0160051c019084905b828110611018575050610e6c565b6000815501849061100a565b9091508190610fff565b634e487b7160e01b600052604160045260246000fd5b604488886040519163dface73760e01b835260048301526024820152fd5b6040516366a662b960e01b8152600490fd5b346102d45760003660031901126102d457602060ff60005460b01c16604051908152f35b346102d45760003660031901126102d4576000546040516001600160a01b039091168152602090f35b346102d4576110cf366128fb565b90927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080549260ff9360ff8160401c1680156112b3575b6105bc5768ffffffffffffffffff19166801000000000000000217825580850361058b5760005b61ffff908181169187831015611279578061116461115f611157611152878d8c612c21565b612c01565b95878d612c21565b612b4f565b9361116e81612ee4565b16908160005260019060209082825260039283604060002001549163ffffffff80938d6060918381841c16151560001461125a575050876000528386528660406000200154901c16925b80891693168311908115611218575b5061058b57611213967fbe23d3a200da2b9b5c3dc9ede50856fc5054f16dd43700ed683b30a15890d8e69461120792876000528552604060002001612b60565b604051908152a2612cd2565b61112d565b83151591508161122a575b508e6111c7565b9050856000528184528b856040600020015460801c16600052600284528160406000200154841c1682108e611223565b9150915060801c166000526002845282826040600020015416926111b8565b845460ff60401b19168555604051600281527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b5060026001600160401b0382161015611106565b346102d45760803660031901126102d4576112e0612ce5565b60443561ffff81168082141590816102d4576064811090811561140a575b81156113ea575b5061058b5760ff60005460b01c1660ff811461106257600052600260205260406000209060016004359283815501906024359363ffffffff85168095036102d4578254916102d45765ffff000000007fc41b8960976a7a25521ff61f37a55273ba6134adad2fbf2728661084386f21d69561ffff60301b611384612bdf565b60301b16936001600160401b031916179160201b161717905560005460ff8160b01c169060ff60b01b6113b683612c10565b60b01b169060ff60b01b1916176000556113e5604051928392836020909392919360ff60408201951681520152565b0390a1005b9150506000906024359063ffffffff82168092036102d457101583611305565b905060243563ffffffff81168091036102d457620186a010906112fe565b346102d45760203660031901126102d4576004356001600160401b0381116102d4576114589036906004016128cb565b60005b81811061146457005b8060051b83013561011e19843603018112156102d457611482612ce5565b611493610d1760c083870101612b41565b6114a4610d2d60e083870101612b41565b6114af818501612d8e565b60005461ffff808260a01c16146110625781850135600052600560205260406000206020838701013560005260205260ff604060002054166117e85761ffff9060a01c16600052600160205260406000208185013581556020828601013560018201556040828601013560028201556115de600382016001600160401b0361153b6060868a0101612bcb565b166001600160401b0319825416178155608061156361155d82878b0101612b4f565b83612b60565b61159461157460a0878b0101612b4f565b835463ffffffff60601b191660609190911b63ffffffff60601b16178355565b6115a260c0868a0101612b41565b825460ff60801b1916911b60ff60801b161781556115c487850160e001612b41565b815460ff60881b191660889190911b60ff60881b16179055565b6115ef858301610100810190612b83565b906001600160401b03821161102e5761160b60048401546129bd565b601f81116117a1575b50600090601f831160011461172c579180600492600197969594600092611721575b5050600019600383901b1c191690861b179101555b808501356000526005602052604060002060208287010135600052602052604060002060ff1990848282541617905561ffff60005460a01c16600052600660205283604060002091825416179055600054907f797331683c7d888af91e5c6800626a01b5f1f7337a712c6915baa1b39c138a096116f761ffff8460a01c16926040519181602084938c010135908b0135868460409194939261ffff606083019616825260208201520152565b0390a161ffff60a01b9061170a90612cd2565b60a01b169061ffff60a01b1916176000550161145b565b013590508980611636565b6004840160005260206000209160005b601f198516811061178957509260049260019796959492889383601f1981161061176f575b505050811b0191015561164b565b0135600019600384901b60f8161c19169055898080611761565b9092602060018192868601358155019401910161173c565b600484016000526020600020601f840160051c8101602085106117e1575b601f830160051c820181106117d5575050611614565b600081556001016117bf565b50806117bf565b60405163dface73760e01b815282860180356004830152602001356024820152604490fd5b346102d45760003660031901126102d457602060ff60005460b81c16604051908152f35b346102d45760203660031901126102d45761ffff61184d61284c565b166000526006602052602060ff604060002054166040519015158152f35b346102d45760a03660031901126102d457611884612945565b60803660231901126102d457611898612ce5565b6118a181612f91565b60643561ffff81168091036102d4576064811090811561196e575b8115611952575b5061058b5760ff168060005260026020526001604060002060243581550160443563ffffffff81168091036102d45781549065ffff00000000611904612bdf565b60201b169061ffff60301b611917612bf0565b60301b16926001600160401b03191617171790557f65cf376ad90319fcd712339e99077f2b354f1228d13433859a49298959167f9f600080a2005b90506044359063ffffffff82168092036102d4571015826118c3565b905060443563ffffffff81168091036102d457620186a010906118bc565b346102d45760203660031901126102d457602061ffff806119ab61284c565b166000526001825260ff60036040600020015460801c1660005260028252600160406000200154821c16604051908152f35b346102d4576119eb366128fb565b90926119f5612f1a565b81830361058b5760005b838110611a0857005b611a16611152828685612c21565b90611a2561115f828689612c21565b611a2e83612ee4565b61ffff8093169081600052600160209080825260406000209563ffffffff80851692620186a08411928315611aea575b50508115611ac5575b5061058b57611ab87ffb693a840da2c82bf8745bfbd3a11f333cab1df44bfb799d781b4f0fdb9fa7cf936003600198019081549063ffffffff60601b9060601b169063ffffffff60601b1916179055565b604051908152a2016119ff565b821515915081611ad7575b508b611a67565b9050600387015460401c1681108b611ad0565b909192508315159182611b02575b5050908c80611a5e565b90915060ff60038a015460801c166000526002855260406000200154841c1682108c80611af8565b346102d45760203660031901126102d45761ffff611b4661284c565b16600052600160205260408060002063ffffffff60036002830154920154831c1682519182526020820152f35b346102d4576020806003193601126102d457611b8d61284c565b611b95612ce5565b611b9e81612ee4565b600054604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b60048201526001600160a01b03929184908290602490829087165afa9283156102e0578491600094611d6e575b5090602491604051928380926305b77b2360e41b825261ffff871697886004840152165afa9081156102e057600091611d41575b50611d2f576113e57f1702e5d9e3fa58c4f7dbc5dc0f4aea9d91963be3a1b67e804d00fc4566b5b3c3938360005260018152604060002093600660405192611c68846129f7565b86548452611cd16004600189015498838701998a526002810154604088015260ff60038201546001600160401b03811660608a015263ffffffff808260401c1660808b01528160601c1660a08a0152818160801c1660c08a015260881c1660e088015201612a4f565b61010085015283516000526005815260406000208751600052815260406000209260ff19938481541690556000525260406000209081541690555192516040519384938460409194939261ffff606083019616825260208201520152565b604051635b77ebe360e11b8152600490fd5b90508381813d8311611d67575b611d588183612a2e565b810103126102d4575184611c21565b503d611d4e565b82919450611d8a906024933d8411610312576103048183612a2e565b939091611bed565b346102d45760003660031901126102d45761ffff8060005460a01c1690611db882612c6d565b9160005b82811682811015610b48578160019163ffffffff611de4611ddd8896612af4565b9289612c9f565b911690520116611dbc565b346102d45760203660031901126102d45761ffff611e0b61284c565b6060610100604051611e1c816129f7565b60008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e08201520152611e5a612c31565b50611e63612c31565b501660005260016020526120296040600020611eed600460405192611e87846129f7565b80548452600181015460208501526002810154604085015260ff60038201546001600160401b038116606087015263ffffffff8160401c16608087015263ffffffff8160601c1660a0870152818160801c1660c087015260881c1660e085015201612a4f565b61010082015260ff60c0820151166000526002602052604060002060ff60e083015116600052600360205261ffff6060604060002082600160405195611f3287612a13565b80548752015463ffffffff81166020870152818160201c16604087015260301c168285015282600160405192611f6784612a13565b8054845201546001600160401b03811660208401526001600160401b038160401c16604084015260801c1682820152828260405197889761010061012091828b528051838c015260208101516101408c015260408101516101608c01526001600160401b0385820151166101808c015263ffffffff6080820151166101a08c015263ffffffff60a0820151166101c08c015260ff60c0820151166101e08c015260ff60e0820151166102008c01520151906102208a015261024089019061285d565b958051602089015263ffffffff602082015116604089015282604082015116828901520151166080860152805160a08601526001600160401b0360208201511660c08601526001600160401b0360408201511660e08601520151166101008301520390f35b346102d45760203660031901126102d45760ff6120a9612945565b1660005260036020526080604060002061ffff600182549201546001600160401b0360405193845280821660208501528160401c166040840152831c166060820152f35b346102d4576120fb366128fb565b9092612105612f1a565b81830361058b5760005b83811061211857005b612126611152828685612c21565b9061213561115f828689612c21565b9161213f81612ee4565b61ffff809116908160005260019060209082825260039283604060002001549163ffffffff80936060908281831c16151560001461222a5750876000528386528660406000200154901c16925b808916931683119081156121e7575b5061058b576001967fbe23d3a200da2b9b5c3dc9ede50856fc5054f16dd43700ed683b30a15890d8e6946121da92876000528552604060002001612b60565b604051908152a20161210f565b8315159150816121f9575b508c61219b565b90508560005281845260ff856040600020015460801c16600052600284528160406000200154841c1682108c6121f2565b905060ff915060801c1660005260028452828260406000200154169261218c565b346102d4576122593661289d565b612261612f1a565b61226a82612ee4565b61ffff80921691826000526001906020918083526003604060002001549163ffffffff92838160601c1615156000146123465750856000528184528260036040600020015460601c16925b80861693168311908115612302575b5061058b577fbe23d3a200da2b9b5c3dc9ede50856fc5054f16dd43700ed683b30a15890d8e693610816918660005284526003604060002001612b60565b831515915081612314575b50866122c4565b90508560005281845260ff60036040600020015460801c16600052600284528160406000200154841c1682108661230d565b60ff9060801c166000526002845282826040600020015416926122b5565b346102d45760803660031901126102d45761237d612ce5565b6024356001600160401b038082168092036102d45781159081156124b1575b811561249b575b8115612481575b5061058b5760ff60005460b81c169060ff821461106257600091825260036020526040909120600435808255600190910180547f0f0d046ee2b52a0a221c36aeef33f03c489743fd51e5f7073adde45396b196349367ffffffffffffffff60401b612413612bb5565b60401b169061ffff60801b612426612bdf565b60801b169260018060901b031916171717905560005460ff8160b81c169060ff60b81b61245283612c10565b60b81b169060ff60b81b1916176000556113e5604051928392836020909392919360ff60408201951681520152565b90506044359081168091036102d4576298968010826123aa565b90506044358181168091036102d45715906123a3565b905060643561ffff81168091036102d4576064109061239c565b346102d4576003196040368201126102d4576124e561284c565b6001600160401b036024358181116102d457610120816004019482360301126102d457612510612ce5565b61ffff60e4820193612524610d2d86612b41565b61252d86612d8e565b61253681612ee4565b169384600052600190602091808352604060002092835483351480159061273e575b61058b576125e6600493604487013560028701556125ac61259261257e60848a01612b4f565b9a61258d60038a019c8d612b60565b612b41565b8a5460ff60881b191660889190911b60ff60881b16178a55565b6125db6125bb60a48901612b4f565b8a5463ffffffff60601b191660609190911b63ffffffff60601b16178a55565b610104870190612b83565b939094019386841161102e576125fc85546129bd565b601f81116126f5575b50600091601f8511600114612684575092806064959381936126429896600094612679575b50501b916000199060031b1c19161790555b01612bcb565b166001600160401b03198254161790557f56508411160826a7b5260ed4ed940a19e80d3a001e590212444c7e25626bfe0e600080a2005b013592508b8061262a565b91601f9493941984168660005283600020936000905b8282106126de5750509161264297959391856064989694106126c4575b505050811b01905561263c565b0135600019600384901b60f8161c191690558980806126b7565b80888597829496880135815501960193019061269a565b8560005282600020601f860160051c810191848710612734575b601f0160051c019084905b828110612728575050612605565b6000815501849061271a565b909150819061270f565b508184015460248601351415612558565b346102d45760203660031901126102d45761ffff61276b61284c565b166000526001602052602063ffffffff60036040600020015460401c16604051908152f35b346102d45760203660031901126102d45760206127b36127ae61284c565b612af4565b63ffffffff60405191168152f35b346102d45760403660031901126102d45760043560005260056020526040600020602435600052602052602060ff604060002054166040519015158152f35b346102d45760203660031901126102d45761ffff61281c61284c565b16600052600160205261069b6128386004604060002001612a4f565b60405191829160208352602083019061285d565b6004359061ffff821682036102d457565b919082519283825260005b848110612889575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612868565b60409060031901126102d45760043561ffff811681036102d4579060243563ffffffff811681036102d45790565b9181601f840112156102d4578235916001600160401b0383116102d4576020808501948460051b0101116102d457565b60406003198201126102d4576001600160401b03916004358381116102d45782612927916004016128cb565b939093926024359182116102d457612941916004016128cb565b9091565b6004359060ff821682036102d457565b602090602060408183019282815285518094520193019160005b82811061297d575050505090565b835163ffffffff168552938101939281019260010161296f565b60028210156129a7570190600090565b634e487b7160e01b600052603260045260246000fd5b90600182811c921680156129ed575b60208310146129d757565b634e487b7160e01b600052602260045260246000fd5b91607f16916129cc565b61012081019081106001600160401b0382111761102e57604052565b608081019081106001600160401b0382111761102e57604052565b90601f801991011681019081106001600160401b0382111761102e57604052565b90604051918260008254612a62816129bd565b90818452602094600191600181169081600014612ad25750600114612a93575b505050612a9192500383612a2e565b565b600090815285812095935091905b818310612aba575050612a919350820101388080612a82565b85548884018501529485019487945091830191612aa1565b92505050612a9194925060ff191682840152151560051b820101388080612a82565b61ffff16600052600160205260036040600020015463ffffffff90818160601c168015600014612b3b575060ff9060801c1660005260026020526001604060002001541690565b91505090565b3560ff811681036102d45790565b3563ffffffff811681036102d45790565b805463ffffffff60401b191660409290921b63ffffffff60401b16919091179055565b903590601e19813603018212156102d457018035906001600160401b0382116102d4576020019181360383136102d457565b6044356001600160401b03811681036102d45790565b356001600160401b03811681036102d45790565b60643561ffff811681036102d45790565b60843561ffff811681036102d45790565b3561ffff811681036102d45790565b60ff1660ff81146102965760010190565b91908110156129a75760051b0190565b60405190612c3e82612a13565b60006060838281528260208201528260408201520152565b6001600160401b03811161102e5760051b60200190565b90612c7782612c56565b612c846040519182612a2e565b8281528092612c95601f1991612c56565b0190602036910137565b80518210156129a75760209160051b010190565b908160209103126102d457516001600160a01b03811681036102d45790565b61ffff8091169081146102965760010190565b6000546040516312d43a5160e01b81526001600160a01b03916020908290600490829086165afa9081156102e057600091612d3d575b50163303612d2557565b60405163093650d560e01b8152336004820152602490fd5b612d56915060203d602011610312576103048183612a2e565b38612d1b565b60ff1680600052600360205260406000205415612d765750565b60249060405190638a2747e560e01b82526004820152fd5b6080810190612d9c82612b4f565b9060a081019163ffffffff9081612db285612b4f565b1615612ebb578180612dc386612b4f565b16911611938415612e61575b508315612e49575b8315612de7575b50505061058b57565b829350612df5819293612b4f565b1615159283612e0a575b505050388080612dde565b60ff9192935060c0612e1e612e2592612b4f565b9401612b41565b16600052600260205261ffff60016040600020015460201c16911610388080612dff565b9250620186a083612e5984612b4f565b161192612dd7565b90809450612e6e82612b4f565b1615159081612e80575b509238612dcf565b612e8a9150612b4f565b60ff612e9860c08401612b41565b1660005260026020528361ffff60016040600020015460201c1691161038612e78565b60ff612ec960c08501612b41565b16600052600260205281808060016040600020015416612dc3565b61ffff1680600052600660205260ff6040600020541615612f025750565b602490604051906350e006a160e11b82526004820152fd5b60005460405163481c6a7560e01b81526001600160a01b03916020908290600490829086165afa9081156102e057600091612f72575b50163303612f5a57565b604051632a19e83360e01b8152336004820152602490fd5b612f8b915060203d602011610312576103048183612a2e565b38612f50565b60ff1680600052600260205261ffff60016040600020015460201c1615612fb55750565b602490604051906355dfbcd560e11b82526004820152fd5b61ffff90818111612fdc571690565b604490604051906306dfcc6560e41b8252601060048301526024820152fdfea264697066735822122053310389a59615c78f619a4120cfa4447910aaccbdd16702b06faefb281112ba64736f6c63430008180033