0 txs
2.22m calls
constructor
constructor()
functions
calculateFeeAmount
viewfunction calculateFeeAmount(address _trader, uint256 _normalFeeAmountCollateral) view returns (uint256)
getAddresses
viewfunction getAddresses() view returns (tuple)
getFeeTier
viewfunction getFeeTier(uint256 _feeTierIndex) view returns (tuple)
getFeeTiersCount
viewfunction getFeeTiersCount() view returns (uint256)
getFeeTiersTraderDailyInfo
viewfunction getFeeTiersTraderDailyInfo(address _trader, uint32 _day) view returns (tuple)
getFeeTiersTraderInfo
viewfunction getFeeTiersTraderInfo(address _trader) view returns (tuple)
getGroupVolumeMultiplier
viewfunction getGroupVolumeMultiplier(uint256 _groupIndex) view returns (uint256)
getTraderFeeTiersEnrollment
viewfunction getTraderFeeTiersEnrollment(address _trader) view returns (tuple)
getTraderUnclaimedPoints
viewfunction getTraderUnclaimedPoints(address _trader) view returns (uint224)
hasRole
viewfunction hasRole(address _account, uint8 _role) view returns (bool)
hasRoles
viewfunction hasRoles(address _account, uint8 _roleA, uint8 _roleB) view returns (bool)
addTradersUnclaimedPoints
nonpayablefunction addTradersUnclaimedPoints(address[] _traders, uint8[] _creditTypes, uint224[] _points)
initialize
nonpayablefunction initialize(address _govTimelock)
initializeFeeTiers
nonpayablefunction initializeFeeTiers(uint256[] _groupIndices, uint256[] _groupVolumeMultipliers, uint256[] _feeTiersIndices, tuple[] _feeTiers)
setFeeTiers
nonpayablefunction setFeeTiers(uint256[] _feeTiersIndices, tuple[] _feeTiers)
setGroupVolumeMultipliers
nonpayablefunction setGroupVolumeMultipliers(uint256[] _groupIndices, uint256[] _groupVolumeMultipliers)
setRoles
nonpayablefunction setRoles(address[] _accounts, uint8[] _roles, bool[] _values)
setTradersFeeTiersEnrollment
nonpayablefunction setTradersFeeTiersEnrollment(address[] _traders, tuple[] _values)
updateTraderPoints
nonpayablefunction updateTraderPoints(address _trader, uint256 _volumeUsd, uint256 _pairIndex)
events
AccessControlUpdated
event AccessControlUpdated(address target, uint8 role, bool access)
AddressesUpdated
event AddressesUpdated((address gns, address gnsStaking, address treasury) addresses)
FeeTiersUpdated
event FeeTiersUpdated(uint256[] feeTiersIndices, (uint32 feeMultiplier, uint32 pointsThreshold)[] feeTiers)
GroupVolumeMultipliersUpdated
event GroupVolumeMultipliersUpdated(uint256[] groupIndices, uint256[] groupVolumeMultipliers)
Initialized
event Initialized(uint8 version)
TraderDailyPointsIncreased
event TraderDailyPointsIncreased(address indexed trader, uint32 indexed day, uint224 points)
TraderEnrollmentUpdated
event TraderEnrollmentUpdated(address indexed trader, (uint8 status, uint248 __placeholder) enrollment)
TraderFeeMultiplierCached
event TraderFeeMultiplierCached(address indexed trader, uint32 indexed day, uint32 feeMultiplier)
TraderInfoFirstUpdate
event TraderInfoFirstUpdate(address indexed trader, uint32 day)
TraderInfoUpdated
event TraderInfoUpdated(address indexed trader, (uint32 lastDayUpdated, uint224 trailingPoints) traderInfo)
TraderPointsCredited
event TraderPointsCredited(address indexed trader, uint32 indexed day, uint8 creditType, uint224 points)
TraderTrailingPointsExpired
event TraderTrailingPointsExpired(address indexed trader, uint32 fromDay, uint32 toDay, uint224 expiredPoints)
TraderUnclaimedPointsClaimed
event TraderUnclaimedPointsClaimed(address indexed trader, uint32 indexed day, uint224 points)
errors
AboveMax
error AboveMax()
AlreadyExists
error AlreadyExists()
BelowMin
error BelowMin()
BlockOrder
error BlockOrder()
DoesntExist
error DoesntExist()
InitError
error InitError()
InsufficientBalance
error InsufficientBalance()
InvalidAddress
error InvalidAddress()
InvalidAddresses
error InvalidAddresses()
InvalidCollateralIndex
error InvalidCollateralIndex()
InvalidInputLength
error InvalidInputLength()
NotAllowed
error NotAllowed()
NotAuthorized
error NotAuthorized()
Overflow
error Overflow()
Paused
error Paused()
PointsOverflow
error PointsOverflow()
UnsupportedChain
error UnsupportedChain()
WrongAccess
error WrongAccess()
WrongFeeTier
error WrongFeeTier()
WrongIndex
error WrongIndex()
WrongLength
error WrongLength()
WrongOrder
error WrongOrder()
WrongOrderType
error WrongOrderType()
WrongParams
error WrongParams()
WrongTradeType
error WrongTradeType()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61265b80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806395a8c58d116100cd578063b9c9722911610081578063eccea3e211610066578063eccea3e214610344578063eced52491461037b578063fed8a1901461038e57600080fd5b8063b9c972291461031e578063c4d66de81461033157600080fd5b8063a89db8e5116100b2578063a89db8e5146102f0578063acbaaf33146102f8578063b61ce13b1461030b57600080fd5b806395a8c58d14610248578063a39fac121461026b57600080fd5b8063508cbfbe1161012457806384e3ebe21161010957806384e3ebe2146101f757806388f16bd114610222578063944f577a1461023557600080fd5b8063508cbfbe146101b7578063794d8520146101d757600080fd5b8063101e65031461015657806331ca48871461016b57806333534de2146101915780634f09a236146101a4575b600080fd5b610169610164366004611d55565b6103a1565b005b61017e610179366004611def565b610506565b6040519081526020015b60405180910390f35b61016961019f366004611e4d565b610517565b61017e6101b2366004611f2d565b610611565b6101ca6101c5366004611f57565b610624565b6040516101889190611f98565b6101ea6101e5366004611fd7565b610641565b604051610188919061200e565b61020a610205366004611f57565b61065f565b6040516001600160e01b039091168152602001610188565b610169610230366004612034565b61066a565b6101696102433660046120a0565b61068c565b61025b61025636600461210f565b6106aa565b6040519015158152602001610188565b6102be604080516060810182526000808252602082018190529181019190915250604080516060810182526003546001600160a01b03908116825260045481166020830152600554169181019190915290565b6040805182516001600160a01b0390811682526020808501518216908301529282015190921690820152606001610188565b61017e610701565b6101ea610306366004611f57565b610710565b610169610319366004611d55565b61072d565b61025b61032c366004612142565b61074f565b61016961033f366004611f57565b6107fe565b610357610352366004611def565b61093c565b60408051825163ffffffff9081168252602093840151169281019290925201610188565b610169610389366004612034565b610959565b61016961039c366004612185565b610970565b60006103ac816109a8565b85841415806103bb5750858214155b156103d957604051637db491eb60e01b815260040160405180910390fd5b60005b868110156104fc5760008686838181106103f8576103f86121b8565b905060200201602081019061040d91906121ce565b600381111561041e5761041e611f72565b148015610459575033888883818110610439576104396121b8565b905060200201602081019061044e9190611f57565b6001600160a01b0316145b1561047757604051631eb49d6d60e11b815260040160405180910390fd5b6104f488888381811061048c5761048c6121b8565b90506020020160208101906104a19190611f57565b8787848181106104b3576104b36121b8565b90506020020160208101906104c891906121ce565b8686858181106104da576104da6121b8565b90506020020160208101906104ef91906121e9565b6109d2565b6001016103dc565b5050505050505050565b600061051182610a74565b92915050565b600054600490610100900460ff16158015610539575060005460ff8083169116105b6105a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff8316176101001790556105c58989898989898989610a92565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b600061061d8383610aaa565b9392505050565b604080518082019091526000808252602082015261051182610b58565b604080518082019091526000808252602082015261061d8383610be1565b600061051182610c59565b600160036106788282610c8e565b61068486868686610cb6565b505050505050565b6001610697816109a8565b6106a385858585610df9565b5050505050565b6001600160a01b0382166000908152600260205260408120818360038111156106d5576106d5611f72565b60038111156106e6576106e6611f72565b815260208101919091526040016000205460ff169392505050565b600061070b610ec8565b905090565b604080518082019091526000808252602082015261051182610f29565b6001610738816109a8565b610746878787878787610f91565b50505050505050565b6001600160a01b03831660009081526002602052604081208184600381111561077a5761077a611f72565b600381111561078b5761078b611f72565b815260208101919091526040016000205460ff16806107f657506001600160a01b0384166000908152600260205260408120908360038111156107d0576107d0611f72565b60038111156107e1576107e1611f72565b815260208101919091526040016000205460ff165b949350505050565b600054610100900460ff161580801561081e5750600054600160ff909116105b806108385750303b158015610838575060005460ff166001145b61089b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610598565b6000805460ff1916600117905580156108be576000805461ff0019166101001790555b6001600160a01b0382166108e557604051632c1c702960e21b815260040160405180910390fd5b6108f282600060016109d2565b8015610938576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b604080518082019091526000808252602082015261051182611209565b6001610964816109a8565b6106a385858585611262565b33301461099057604051631b17ff5560e21b815260040160405180910390fd5b6109a3838361099e84611374565b611392565b505050565b6109b233826106aa565b6109cf57604051631b17ff5560e21b815260040160405180910390fd5b50565b6001600160a01b038316600090815260026020526040812082918460038111156109fe576109fe611f72565b6003811115610a0f57610a0f611f72565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8d7fdec37f50c07219a6a0859420936836eb9254bf412035e3acede18b8b093d838383604051610a679392919061220b565b60405180910390a1505050565b6000610a7e611825565b600092835260080160205250604090205490565b610a9e88888888610df9565b6104fc84848484611262565b600080610ab5611825565b6001600160a01b0385166000908152600b820160209081526040808320600a850190925282209293509181610ae861182f565b63ffffffff9081168252602082019290925260400160002054169050801580610b2657506001825460ff166001811115610b2457610b24611f72565b145b610b4c576103e8610b3d8663ffffffff8416612257565b610b479190612284565b610b4e565b845b9695505050505050565b6040805180820190915260008082526020820152610b74611825565b6001600160a01b0383166000908152600b9190910160205260409081902081518083019092528054829060ff166001811115610bb257610bb2611f72565b6001811115610bc357610bc3611f72565b8152905461010090046001600160f81b031660209091015292915050565b6040805180820190915260008082526020820152610bfd611825565b6001600160a01b03939093166000908152600a939093016020908152604080852063ffffffff948516865282529384902084518086019095525492831684526401000000009092046001600160e01b0316918301919091525090565b6000610c63611825565b6001600160a01b039092166000908152600c929092016020525060409020546001600160e01b031690565b610c9933838361074f565b61093857604051631b17ff5560e21b815260040160405180910390fd5b828114610cd6576040516349552d5960e11b815260040160405180910390fd5b6000610ce0611825565b905060005b8481101561068457600080878784818110610d0257610d026121b8565b9050602002016020810190610d179190611f57565b868685818110610d2957610d296121b8565b905060400201803603810190610d3f91906122a5565b600060208083018290526001600160a01b0384168252600b8801905260409020815181549395509193508392909190829060ff191660018381811115610d8757610d87611f72565b02179055506020919091015181546001600160f81b039091166101000260ff9091161790556040516001600160a01b038316907f2d222f8a9169a5d38b64fa1a56389af27712a1d7f1743022cdd8b466c27141eb90610de7908490611f98565b60405180910390a25050600101610ce5565b828114610e19576040516349552d5960e11b815260040160405180910390fd5b6000610e23611825565b600801905060005b84811015610e8357838382818110610e4557610e456121b8565b90506020020135826000888885818110610e6157610e616121b8565b6020908102929092013583525081019190915260400160002055600101610e2b565b507fb173e04a52e3de8d79b981e4ffc87d49e6577ceab559ebf36a70bba02cc2569c85858585604051610eb99493929190612369565b60405180910390a15050505050565b600080610ed3611825565b905060085b8015610f2057600082610eec60018461239b565b60088110610efc57610efc6121b8565b015463ffffffff161115610f105792915050565b610f19816123ae565b9050610ed8565b50600091505090565b6040805180820190915260008082526020820152610f45611825565b6001600160a01b039290921660009081526009909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160e01b0316908301525090565b8483141580610fa05750848114155b15610fbe576040516349552d5960e11b815260040160405180910390fd5b6000610fc8611825565b90506000610fd461182f565b905060005b878110156111fe5760008060008b8b85818110610ff857610ff86121b8565b905060200201602081019061100d9190611f57565b8a8a8681811061101f5761101f6121b8565b905060200201602081019061103491906123c5565b898987818110611046576110466121b8565b905060200201602081019061105b91906123e2565b6001600160a01b0383166000908152600c8a016020908152604080832054600a8d01835281842063ffffffff8d1685529092528220549497509295509093509183916110bc916001600160e01b03918216916401000000009091041661240b565b6110c6919061240b565b905060026110dc601e6001600160e01b03612432565b6110e69190612432565b6001600160e01b0316816001600160e01b031611156111185760405163034080e960e51b815260040160405180910390fd5b6001600160a01b0384166000908152600c880160205260408120805484929061114b9084906001600160e01b031661240b565b92506101000a8154816001600160e01b0302191690836001600160e01b031602179055506000600181111561118257611182611f72565b83600181111561119457611194611f72565b036111a5576111a584600080611392565b8563ffffffff16846001600160a01b03167ff050ee240db213d72ebabd2f46c0d3270c8206c02d51e074d447c4ca20bd7a6f85856040516111e7929190612458565b60405180910390a350505050806001019050610fd9565b505050505050505050565b6040805180820190915260008082526020820152611225611825565b8260088110611236576112366121b8565b6040805180820190915291015463ffffffff808216835264010000000090910416602082015292915050565b828114611282576040516349552d5960e11b815260040160405180910390fd5b600061128c611825565b905060005b848110156112f0578383828181106112ab576112ab6121b8565b905060400201828787848181106112c4576112c46121b8565b90506020020135600881106112db576112db6121b8565b016112e6828261247d565b5050600101611291565b5060005b8481101561133e57611336868683818110611311576113116121b8565b9050602002013585858481811061132a5761132a6121b8565b9050604002018461183e565b6001016112f4565b507fa6ec87cc1a516d9ebb5c03260f77d2bd8c22dc8d28d71e740b320fbd4d70413185858585604051610eb994939291906124d3565b600061137e611ae4565b600092835260205250604090206007015490565b600061139c611825565b90506113a784611aee565b60008281526008820160205260408120546103e8906113c69086612257565b6113d09190612284565b6001600160a01b0386166000908152600a8401602052604081209192506113f561182f565b63ffffffff811660009081526020849052604090209091506001600160e01b038416156114bd5780548490829060049061144190849064010000000090046001600160e01b031661240b565b92506101000a8154816001600160e01b0302191690836001600160e01b031602179055508163ffffffff16886001600160a01b03167f4f6f49815b9e6682a4f6bc21ba0b5261e803cc5d56c97477a5dc75925fd74e68866040516114b491906001600160e01b0391909116815260200190565b60405180910390a35b6001600160a01b038816600090815260098601602052604081208054909163ffffffff909116900361154757805463ffffffff191663ffffffff841690811782556040519081526001600160a01b038a16907f8aa104927dea7fb70b6e5eb2e2891e3022714eea9e80c493fdabffce48b423939060200160405180910390a2505050505050505050565b805463ffffffff90811690841611156111fe57600080611568601e8661254c565b835490915063ffffffff8083169116106116ab57825463ffffffff81166000908152602088905260409020546115b6916001600160e01b03640100000000928390048116929091041661240b565b83549092506000906115d090601e9063ffffffff1661254c565b905060006115df60018461254c565b90506000825b8263ffffffff168163ffffffff161161163b5763ffffffff8116600090815260208b905260409020546116299064010000000090046001600160e01b03168361240b565b915061163481612569565b90506115e5565b50611646818661258c565b6040805163ffffffff8087168252851660208201526001600160e01b038416918101919091529095506001600160a01b038f16907f964f0f6a92f6d7eedbff7670a2e850f5511e59321724a9dbef638c8068b7527b9060600160405180910390a25050505b6001600160e01b0382166401000000000263ffffffff86161783556040516001600160a01b038c16907f211bcdec669891da564d4d5bd35fa76cf6cc72a218db19f402ec042770fb83fb9061171490865463ffffffff81168252602090811c9082015260400190565b60405180910390a26103e86000611729610ec8565b90505b80156117bf5760008a61174060018461239b565b60088110611750576117506121b8565b6040805180820190915291015463ffffffff8082168352640100000000909104166020820181905290915061178e90670de0b6b3a7640000906125ac565b6001600160e01b0316856001600160e01b0316106117ae575191506117bf565b506117b8816123ae565b905061172c565b50845463ffffffff191663ffffffff82811691821787556040519182528716906001600160a01b038e16907f136cc4347dc65b38625089ea9df2874eda024554dc7d0a363036d6fa6d7e4c9e9060200160405180910390a3505050505050505050505050565b6000806097610511565b600061070b6201518042612284565b600061184d60208401846125de565b63ffffffff16158015611873575061186b60408401602085016125de565b63ffffffff16155b9050801580156118e257506103e861188e60208501856125de565b63ffffffff161015806118c457506118a960026103e86125fb565b63ffffffff166118bc60208501856125de565b63ffffffff16105b806118e257506118da60408401602085016125de565b63ffffffff16155b156119005760405163841ff20360e01b815260040160405180910390fd5b600061190e6001600861239b565b85109050811561196b57808015611948575060008361192e876001612612565b6008811061193e5761193e6121b8565b015463ffffffff16115b15611966576040516304b4359960e11b815260040160405180910390fd5b6106a3565b8015611a2c5760008361197f876001612612565b6008811061198f5761198f6121b8565b6040805180820190915291015463ffffffff80821680845264010000000090920416602083015290915015801590611a0c57506119cf60208601866125de565b63ffffffff16816000015163ffffffff16101580611a0c57506119f860408601602087016125de565b63ffffffff16816020015163ffffffff1611155b15611a2a576040516304b4359960e11b815260040160405180910390fd5b505b84156106a357600083611a4060018861239b565b60088110611a5057611a506121b8565b6040805180820190915291015463ffffffff808216835264010000000090910416602080830191909152909150611a89908601866125de565b63ffffffff16816000015163ffffffff16111580611ac65750611ab260408601602087016125de565b63ffffffff16816020015163ffffffff1610155b15610684576040516304b4359960e11b815260040160405180910390fd5b6000806033610511565b6000611af8611825565b6001600160a01b0383166000908152600c820160205260408120549192506001600160e01b0390911690819003611b2e57505050565b6001600160a01b0383166000908152600983016020526040812090611b5161182f565b6001600160a01b0386166000908152600c86016020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000169055835491925063ffffffff9091169003611c3f576000611bb160018361254c565b835463ffffffff191663ffffffff82811691821786556001600160a01b0389166000818152600a8a016020908152604080832086845282529182902080549094166401000000006001600160e01b038c160217909355519283529293507f8aa104927dea7fb70b6e5eb2e2891e3022714eea9e80c493fdabffce48b42393910160405180910390a250611cb3565b6001600160a01b0385166000908152600a85016020908152604080832063ffffffff8516845290915290208054849190600490611c8e90849064010000000090046001600160e01b031661240b565b92506101000a8154816001600160e01b0302191690836001600160e01b031602179055505b6040516001600160e01b038416815263ffffffff8216906001600160a01b038716907f8b1dd1669c243ea81885b90c31d292a58996045d48bd261b3aea98a09cd66f1e9060200160405180910390a35050505050565b60008083601f840112611d1b57600080fd5b50813567ffffffffffffffff811115611d3357600080fd5b6020830191508360208260051b8501011115611d4e57600080fd5b9250929050565b60008060008060008060608789031215611d6e57600080fd5b863567ffffffffffffffff80821115611d8657600080fd5b611d928a838b01611d09565b90985096506020890135915080821115611dab57600080fd5b611db78a838b01611d09565b90965094506040890135915080821115611dd057600080fd5b50611ddd89828a01611d09565b979a9699509497509295939492505050565b600060208284031215611e0157600080fd5b5035919050565b60008083601f840112611e1a57600080fd5b50813567ffffffffffffffff811115611e3257600080fd5b6020830191508360208260061b8501011115611d4e57600080fd5b6000806000806000806000806080898b031215611e6957600080fd5b883567ffffffffffffffff80821115611e8157600080fd5b611e8d8c838d01611d09565b909a50985060208b0135915080821115611ea657600080fd5b611eb28c838d01611d09565b909850965060408b0135915080821115611ecb57600080fd5b611ed78c838d01611d09565b909650945060608b0135915080821115611ef057600080fd5b50611efd8b828c01611e08565b999c989b5096995094979396929594505050565b80356001600160a01b0381168114611f2857600080fd5b919050565b60008060408385031215611f4057600080fd5b611f4983611f11565b946020939093013593505050565b600060208284031215611f6957600080fd5b61061d82611f11565b634e487b7160e01b600052602160045260246000fd5b600281106109cf576109cf611f72565b81516040820190611fa881611f88565b808352506001600160f81b03602084015116602083015292915050565b63ffffffff811681146109cf57600080fd5b60008060408385031215611fea57600080fd5b611ff383611f11565b9150602083013561200381611fc5565b809150509250929050565b815163ffffffff1681526020808301516001600160e01b03169082015260408101610511565b6000806000806040858703121561204a57600080fd5b843567ffffffffffffffff8082111561206257600080fd5b61206e88838901611d09565b9096509450602087013591508082111561208757600080fd5b5061209487828801611e08565b95989497509550505050565b600080600080604085870312156120b657600080fd5b843567ffffffffffffffff808211156120ce57600080fd5b6120da88838901611d09565b909650945060208701359150808211156120f357600080fd5b5061209487828801611d09565b803560048110611f2857600080fd5b6000806040838503121561212257600080fd5b61212b83611f11565b915061213960208401612100565b90509250929050565b60008060006060848603121561215757600080fd5b61216084611f11565b925061216e60208501612100565b915061217c60408501612100565b90509250925092565b60008060006060848603121561219a57600080fd5b6121a384611f11565b95602085013595506040909401359392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156121e057600080fd5b61061d82612100565b6000602082840312156121fb57600080fd5b8135801515811461061d57600080fd5b6001600160a01b0384168152606081016004841061222b5761222b611f72565b8360208301528215156040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761051157610511612241565b634e487b7160e01b600052601260045260246000fd5b6000826122935761229361226e565b500490565b600281106109cf57600080fd5b6000604082840312156122b757600080fd5b6040516040810181811067ffffffffffffffff821117156122e857634e487b7160e01b600052604160045260246000fd5b60405282356122f681612298565b815260208301356001600160f81b038116811461231257600080fd5b60208201529392505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561235057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061237d60408301868861231e565b828103602084015261239081858761231e565b979650505050505050565b8181038181111561051157610511612241565b6000816123bd576123bd612241565b506000190190565b6000602082840312156123d757600080fd5b813561061d81612298565b6000602082840312156123f457600080fd5b81356001600160e01b038116811461061d57600080fd5b6001600160e01b0381811683821601908082111561242b5761242b612241565b5092915050565b60006001600160e01b038084168061244c5761244c61226e565b92169190910492915050565b6040810161246584611f88565b9281526001600160e01b039190911660209091015290565b813561248881611fc5565b63ffffffff8116905081548163ffffffff19821617835560208401356124ad81611fc5565b67ffffffff000000008160201b168367ffffffffffffffff198416171784555050505050565b600060408083526124e860408401878961231e565b8381036020858101919091528582528691810160005b8781101561253e57833561251181611fc5565b63ffffffff9081168352848401359061252982611fc5565b168284015292840192908401906001016124fe565b509998505050505050505050565b63ffffffff82811682821603908082111561242b5761242b612241565b600063ffffffff80831681810361258257612582612241565b6001019392505050565b6001600160e01b0382811682821603908082111561242b5761242b612241565b6001600160e01b038281168282168181028316929181158285048214176125d5576125d5612241565b50505092915050565b6000602082840312156125f057600080fd5b813561061d81611fc5565b600063ffffffff8084168061244c5761244c61226e565b808201808211156105115761051161224156fea264697066735822122057b4f055d6cfdaa5b5001dacd89cd7829c71f8ec5984ab311a4fd5dde7bc745164736f6c63430008170033