Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xCbd3835DC09052Cc046f0e647D85b2112dE8b7E7
Balance 0 ETH
Nonce 1
Code Size 22046 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

22046 bytes
0x608060405234801561000f575f5ffd5b506004361061030f575f3560e01c8063715018a61161019d578063c3f2e9e4116100e8578063f19ed6be11610093578063f340fa011161006e578063f340fa0114610888578063f5b541a61461092d578063f99d126314610954575f5ffd5b8063f19ed6be1461084f578063f2fde38b14610862578063f324814214610875575f5ffd5b8063de9db776116100c3578063de9db77614610821578063e629989514610829578063f0d2d5a81461083c575f5ffd5b8063c3f2e9e4146107d3578063c99d3a06146107fb578063d547741f1461080e575f5ffd5b806391d1485411610148578063ac51cc3311610123578063ac51cc331461078f578063b3ba3f05146107a2578063b7912f42146107b5575f5ffd5b806391d148541461073057806396f9497114610775578063a217fddf14610788575f5ffd5b80638456cb59116101785780638456cb59146106f85780638da5cb5b146107005780638e23321e1461071d575f5ffd5b8063715018a6146106ca578063728b85fe146106d257806384385c6f146106e5575f5ffd5b80634e36519b1161025d57806368e91bba116102085780636d14c2f6116101e35780636d14c2f6146105ff5780636e6dbb16146106125780636fc9e25714610625575f5ffd5b806368e91bba146105bb5780636b6f8aeb146105d95780636c988ca2146105ec575f5ffd5b80635a628abd116102385780635a628abd146105685780635c975abb1461057b578063649585e11461059d575f5ffd5b80634e36519b146104d65780634f52ccfa1461050b578063570ca7351461054a575f5ffd5b80632f2ff15d116102bd57806336568abe1161029857806336568abe146104a65780633f4ba83a146104b95780634113e5ca146104c1575f5ffd5b80632f2ff15d146104595780633047d9f71461046c578063349b59541461047f575f5ffd5b8063248a9ca3116102ed578063248a9ca3146104025780632e6f95c0146104335780632f08d07514610446575f5ffd5b806301ffc9a71461031357806303438dd01461033b5780631e38e470146103ed575b5f5ffd5b610326610321366004614e33565b610967565b60405190151581526020015b60405180910390f35b6103e0610349366004614ea1565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff9081165f908152600b6020908152604091829020825160a081018452815485168152600182015492810192909252600281015492820192909252600382015483166060820152600490910154909116608082015290565b6040516103329190614eba565b6104006103fb366004615038565b6109ff565b005b6104256104103660046150b6565b5f908152600160208190526040909120015490565b604051908152602001610332565b610400610441366004614ea1565b611123565b610326610454366004614ea1565b611238565b6104006104673660046150cd565b611295565b61040061047a366004614ea1565b6112c0565b6104257f940d6b1946ff1d2b5a9f1909219c3c81a370804b5ba0f91ec0828c99a2e6a68181565b6104006104b43660046150cd565b61165f565b6104006116bd565b6104c96116cf565b60405161033291906150f7565b6104256104e4366004614ea1565b73ffffffffffffffffffffffffffffffffffffffff165f908152600d602052604090205490565b60065473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610332565b60025473ffffffffffffffffffffffffffffffffffffffff16610525565b610425610576366004614ea1565b61173c565b5f5474010000000000000000000000000000000000000000900460ff16610326565b60035473ffffffffffffffffffffffffffffffffffffffff16610525565b60055473ffffffffffffffffffffffffffffffffffffffff16610525565b6104006105e7366004614ea1565b6117e3565b6104006105fa36600461514f565b611b93565b61040061060d366004614ea1565b61218a565b610400610620366004614ea1565b6122e6565b6103e0610633366004614ea1565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff9081165f908152600a6020908152604091829020825160a081018452815485168152600182015492810192909252600281015492820192909252600382015483166060820152600490910154909116608082015290565b61040061239d565b6104006106e0366004614ea1565b6123ae565b6104006106f3366004614ea1565b61251b565b61040061265d565b5f5473ffffffffffffffffffffffffffffffffffffffff16610525565b61040061072b366004614ea1565b61266d565b61032661073e3660046150cd565b5f91825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61040061078336600461518a565b612724565b6104255f81565b61040061079d3660046151b8565b612d82565b6104006107b0366004614ea1565b61321d565b60045473ffffffffffffffffffffffffffffffffffffffff16610525565b6107e66107e13660046151e2565b613319565b60408051928352602083019190915201610332565b610400610809366004614ea1565b613334565b61040061081c3660046150cd565b6134d5565b6104c96134fa565b610400610837366004614ea1565b613565565b61040061084a366004614ea1565b61361c565b61040061085d366004615229565b61375e565b610400610870366004614ea1565b613cf2565b610400610883366004615266565b613d52565b6103e0610896366004614ea1565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff9081165f90815260096020908152604091829020825160a081018452815485168152600182015492810192909252600281015492820192909252600382015483166060820152600490910154909116608082015290565b6104257f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b610400610962366004614ea1565b6140e7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806109f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610a298161419e565b73ffffffffffffffffffffffffffffffffffffffff8781165f9081526009602052604090205416610a86576040517fd1dafa8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8088165f90815260096020908152604091829020825160a08101845281548516815260018201549281019290925260028101549282019290925260038201548316606082018190526004909201548316608082015291881614610b2a576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80602001518614610b67576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460808201515f9173ffffffffffffffffffffffffffffffffffffffff918216911614610b97576001610b99565b5f5b90508560ff168160ff1614610bda576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845f03610c36577fb13d831e6a488f56c4fd5d4face52173b599a861161b81a44a1d4a5268f0a61e89898985608001518989604051610c1e969594939291906152a9565b60405180910390a1610c2f896141a8565b505061111a565b60608201516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc89190615361565b6020840151606085015191925030908381811015610d43576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152939092166024840152604483015260648201526084015b60405180910390fd5b505050505f5f610e39856020015189876060015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc39190615378565b886080015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e349190615378565b61427b565b9150915080821015855f01518660600151876020015188608001518c9091929394610ec9576040517f3a195d9a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9586166004820152938516602485015260448401929092529092166064820152608481019190915260a401610d3a565b5050505073ffffffffffffffffffffffffffffffffffffffff8d81165f9081526009602090815260408083206001015460608b01519094168352600c9091528120805492935091610f1b9084906153c0565b909155505073ffffffffffffffffffffffffffffffffffffffff808d165f90815260096020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116825560018201839055600282019290925560038082018054841690556004909101805490921690915554608087015161100792908116911614610fc65760065473ffffffffffffffffffffffffffffffffffffffff16610fe0565b60055473ffffffffffffffffffffffffffffffffffffffff165b6020870151606088015173ffffffffffffffffffffffffffffffffffffffff1691906142f0565b60808501516040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152602482018b9052909116906340c10f19906044015f604051808303815f87803b15801561107a575f5ffd5b505af115801561108c573d5f5f3e3d5ffd5b505086516060880151602089015160808a01516040517f123930b13fb199e2e8090ce641cda7619ad47e6b1ad9e47dee4e09853d60ad6d965061110c95508e9073ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b60405180910390a150505050505b50505050505050565b61112b614371565b6111557f940d6b1946ff1d2b5a9f1909219c3c81a370804b5ba0f91ec0828c99a2e6a681826143c3565b5061115f81614487565b81906111b0576040517fc765d01100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50611220600880548060200260200160405190810160405280929190818152602001828054801561121557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111ea575b5050505050826144f7565b805161123491600891602090910190614d97565b5050565b5f61124282614487565b80156109f9575073ffffffffffffffffffffffffffffffffffffffff82165f9081527fc2230c5853be911a90ba57818be5e6e765ce73beecde9501f7d9fa9cc293a8a0602052604090205460ff166109f9565b5f82815260016020819052604090912001546112b08161419e565b6112ba838361462a565b50505050565b335f9081527f31c1e66639f421f1853aeefe8ad6b62a3b96f3287efe23106923cd924aa025c2602052604090205460ff1615801561132c5750335f9081527fc2230c5853be911a90ba57818be5e6e765ce73beecde9501f7d9fa9cc293a8a0602052604090205460ff16155b801561134f57505f5473ffffffffffffffffffffffffffffffffffffffff163314155b156113b35773ffffffffffffffffffffffffffffffffffffffff8181165f908152600b60205260409020541633146113b3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181165f908152600b602052604090205416611410576040517f17ee7a7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060a00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f9055600382015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050611234828260200151836060015173ffffffffffffffffffffffffffffffffffffffff166142f09092919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff811633146116ae576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b882826143c3565b505050565b6116c5614371565b6116cd6146eb565b565b6060600780548060200260200160405190810160405280929190818152602001828054801561173257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611707575b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff81165f818152600c60205260408082205490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919290916370a0823190602401602060405180830381865afa1580156117b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190615361565b6109f991906153c0565b7f940d6b1946ff1d2b5a9f1909219c3c81a370804b5ba0f91ec0828c99a2e6a68161180d8161419e565b73ffffffffffffffffffffffffffffffffffffffff8281165f908152600a60205260409020541661186a576040517fa9fd60f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600a6020908152604091829020825160a0810184528154851681526001820154928101929092526002810154928201839052600381015484166060830152600401549092166080830152611906576040517f8306338c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611914826080015161173c565b604083015160808401519192503090838181101561198a576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b505050604080840151608085015173ffffffffffffffffffffffffffffffffffffffff165f908152600d602052918220805491935091906119cc9084906153c0565b909155505073ffffffffffffffffffffffffffffffffffffffff8481165f908152600a6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018590556002820194909455600381018054851690556004908101805490941690935560608601519186015190517f9dc29fac0000000000000000000000000000000000000000000000000000000081523093810193909352602483015290911690639dc29fac906044016020604051808303815f875af1158015611aab573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acf91906153d3565b50611b03848360400151846080015173ffffffffffffffffffffffffffffffffffffffff166142f09092919063ffffffff16565b7fdeb0b8cbac9cc34764fc5fd5981caadf1dbe95a561c86e93e351cb6a2c5037d7848360600151846020015185608001518660400151604051611b8595949392919073ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b60405180910390a150505050565b611b9b614767565b335f908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611bf7576040517ff412a5b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff83161580611c0a57508260ff166001145b8390611c48576040517fd02f78b800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610d3a565b5060ff831615611c725760065473ffffffffffffffffffffffffffffffffffffffff161515611c8e565b60055473ffffffffffffffffffffffffffffffffffffffff1615155b611cc4576040517ff1837cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff831615611ced5760045473ffffffffffffffffffffffffffffffffffffffff161515611d09565b60035473ffffffffffffffffffffffffffffffffffffffff1615155b611d3f576040517f4b62f01300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d48816147bb565b8190611d99576040517f46cc3b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b505f60ff841615611dc25760045473ffffffffffffffffffffffffffffffffffffffff16611ddc565b60035473ffffffffffffffffffffffffffffffffffffffff165b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529091505f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611e49573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6d9190615361565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152909150849073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611eda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611efe9190615361565b10158233868490919293611f6a576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b50506040805160a0810182523380825260208083018a81525f84860181815273ffffffffffffffffffffffffffffffffffffffff8b8116606088018181528e831660808a01908152888652600a90975298909320965187549082167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161788559351600188015590516002870155955160038601805491881691841691909117905591516004909401805494909516931692909217909255612032935091503087614829565b7f23f3e43f7d99b549ef2522f3b06cbd9c546c655edea7f4a429325bdd730636d9338686868673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c49190615378565b8873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561210d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121319190615378565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815260ff96871660208201529081019490945294909116606083015282166080820152911660a082015260c0015b60405180910390a15050505050565b73ffffffffffffffffffffffffffffffffffffffff8181165f90815260096020526040902054166121e7576040517fd1dafa8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527f31c1e66639f421f1853aeefe8ad6b62a3b96f3287efe23106923cd924aa025c2602052604090205460ff161580156122535750335f9081527fc2230c5853be911a90ba57818be5e6e765ce73beecde9501f7d9fa9cc293a8a0602052604090205460ff16155b801561227657505f5473ffffffffffffffffffffffffffffffffffffffff163314155b156122da5773ffffffffffffffffffffffffffffffffffffffff8181165f908152600960205260409020541633146122da576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122e3816141a8565b50565b6122ee614371565b5f73ffffffffffffffffffffffffffffffffffffffff8216612355576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6123a5614371565b6116cd5f61486f565b6123b6614371565b5f73ffffffffffffffffffffffffffffffffffffffff821661241d576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b5061242781614487565b158190612479576040517f018fd19300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b506124a47f940d6b1946ff1d2b5a9f1909219c3c81a370804b5ba0f91ec0828c99a2e6a6818261462a565b50600880546001810182555f919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612523614371565b5f73ffffffffffffffffffffffffffffffffffffffff821661258a576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b5060025473ffffffffffffffffffffffffffffffffffffffff16156125ef576002546125ed907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299073ffffffffffffffffffffffffffffffffffffffff166143c3565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155611234907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299061462a565b612665614371565b6116cd6148e3565b612675614371565b5f73ffffffffffffffffffffffffffffffffffffffff82166126dc576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961274e8161419e565b73ffffffffffffffffffffffffffffffffffffffff8781165f908152600b6020526040902054166127ab576040517f17ee7a7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff861615806127be575060ff86166001145b86906127fc576040517fd02f78b800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610d3a565b5060ff84161580612810575060ff84166001145b849061284e576040517fd02f78b800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610d3a565b505f60ff8716156128775760045473ffffffffffffffffffffffffffffffffffffffff16612891565b60035473ffffffffffffffffffffffffffffffffffffffff165b90505f60ff8616156128bb5760045473ffffffffffffffffffffffffffffffffffffffff166128d5565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff808b165f908152600b6020908152604091829020825160a0810184528154851681526001820154928101929092526002810154928201929092526003820154831660608201819052600490920154831660808201529293509084161461297c576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806080015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129e5576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80602001518814612a22576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03612af6577fa753450af41cbc7607db7a811f61273a2a2fe6c9366c4452aa3c8f7aff3456ce8a848a858a8a604051612a62969594939291906152a9565b60405180910390a173ffffffffffffffffffffffffffffffffffffffff808b165f908152600b60209081526040822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018490556002820193909355600381018054841690556004018054909216909155820151612aee918516908c906142f0565b50505061111a565b60608101516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612b64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b889190615361565b6060830151909150308a8381811015612bf9576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b5050505073ffffffffffffffffffffffffffffffffffffffff8b81165f908152600b602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811682556001820184905560028201939093556003810180548416905560049081018054909316909255517f9dc29fac0000000000000000000000000000000000000000000000000000000081523091810191909152602481018b905290851690639dc29fac906044016020604051808303815f875af1158015612ccd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf191906153d3565b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018990528416906340c10f19906044015f604051808303815f87803b158015612d5f575f5ffd5b505af1158015612d71573d5f5f3e3d5ffd5b505050505050505050505050505050565b612d8a614767565b335f908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612de6576040517f2a57205500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff82161580612df957508160ff166001145b8290612e37576040517fd02f78b800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610d3a565b5060035473ffffffffffffffffffffffffffffffffffffffff1615801590612e76575060045473ffffffffffffffffffffffffffffffffffffffff1615155b612eac576040517f4b62f01300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808060ff8516612ee157505060035460045473ffffffffffffffffffffffffffffffffffffffff9182169250166001612f06565b505060045460035473ffffffffffffffffffffffffffffffffffffffff9182169250165f5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201525f9073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015612f70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f949190615361565b90508333868381811015613000576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b50506040805160a0810182523380825260208083018b81525f84860181815273ffffffffffffffffffffffffffffffffffffffff8d8116606088018181528e831660808a01908152888652600b90975298909320965187549082167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617885593516001880155905160028701559551600386018054918816918416919091179055915160049094018054949095169316929092179092556130c8935091503088614829565b7fca24f95f67cc57e7936c08adcaf3a6f0ab210900a17cd71c0f5c6569089ec9ae338787858873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315a9190615378565b8873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131c79190615378565b6040805173ffffffffffffffffffffffffffffffffffffffff909716875260ff95861660208801528601939093529083166060850152821660808401521660a082015260c00160405180910390a1505050505050565b335f9081527f31c1e66639f421f1853aeefe8ad6b62a3b96f3287efe23106923cd924aa025c2602052604090205460ff161580156132895750335f9081527fc2230c5853be911a90ba57818be5e6e765ce73beecde9501f7d9fa9cc293a8a0602052604090205460ff16155b80156132ac57505f5473ffffffffffffffffffffffffffffffffffffffff163314155b156133105773ffffffffffffffffffffffffffffffffffffffff8181165f908152600a6020526040902054163314613310576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122e381614951565b5f5f6133278686868661427b565b9150915094509492505050565b61333c614371565b5f73ffffffffffffffffffffffffffffffffffffffff82166133a3576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b5060075481906133f8576040517f51dcc98a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50613402816147bb565b8190613453576040517f51dcc98a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b506134c1600780548060200260200160405190810160405280929190818152602001828054801561121557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111ea575050505050826144f7565b805161123491600791602090910190614d97565b5f82815260016020819052604090912001546134f08161419e565b6112ba83836143c3565b6060600880548060200260200160405190810160405280929190818152602001828054801561173257602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611707575050505050905090565b61356d614371565b5f73ffffffffffffffffffffffffffffffffffffffff82166135d4576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b613624614371565b5f73ffffffffffffffffffffffffffffffffffffffff821661368b576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50613695816147bb565b1581906136e7576040517f49978c6400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50600780546001810182555f919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b613766614767565b335f9081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff16156137c2576040517f4cefbb2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff811615806137d557508060ff166001145b8190613813576040517fd02f78b800000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610d3a565b5060ff81161561383d5760065473ffffffffffffffffffffffffffffffffffffffff161515613859565b60055473ffffffffffffffffffffffffffffffffffffffff1615155b61388f576040517ff1837cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8116156138b85760045473ffffffffffffffffffffffffffffffffffffffff1615156138d4565b60035473ffffffffffffffffffffffffffffffffffffffff1615155b61390a576040517f4b62f01300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613913836147bb565b8390613964576040517f46cc3b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201525f9073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa1580156139cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139f39190615361565b90508333848381811015613a5f576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b505050505f8260ff165f14613a8c5760045473ffffffffffffffffffffffffffffffffffffffff16613aa6565b60035473ffffffffffffffffffffffffffffffffffffffff165b6040805160a0810182523380825260208083018981525f84860181815273ffffffffffffffffffffffffffffffffffffffff8d811660608801818152828b1660808a0190815297855260098752898520985189549084167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178a55955160018a0155925160028901559151600388018054918316918616919091179055945160049096018054969095169590921694909417909255908252600c905290812080549293508692909190613b7d9084906153f2565b90915550613ba5905073ffffffffffffffffffffffffffffffffffffffff8616333087614829565b7fb1e94da1109e6700a723417758ec358945c2301ff94e5af90c526daf332b2429338686868573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c379190615378565b8a73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ca49190615378565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529690951660208701529385019290925260ff908116606085015290811660808401521660a082015260c00161217b565b613cfa614371565b73ffffffffffffffffffffffffffffffffffffffff8116613d49576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610d3a565b6122e38161486f565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929613d7c8161419e565b73ffffffffffffffffffffffffffffffffffffffff8781165f908152600a602052604090205416613dd9576040517fa9fd60f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8088165f908152600a6020908152604091829020825160a0810184528154851681526001820154928101929092526002810154928201839052600381015484166060830152600401549092166080830152889015613e91576040517fbae77e2a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b5060035460608201515f9173ffffffffffffffffffffffffffffffffffffffff918216911614613ec2576001613ec4565b5f5b90508760ff168160ff1614613f05576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602001518714613f42576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816080015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613fab576040517f2da91f4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845f03614000577f058671e81fa625d8f6128af3d15522abe3c50bb21a730a3bdf384d0ed4b4ff2389836060015189898989604051613fef969594939291906152a9565b60405180910390a1610c2f89614951565b73ffffffffffffffffffffffffffffffffffffffff808a165f908152600a6020908152604080832060020189905560808601519093168252600d9052908120805487929061404f9084906153f2565b925050819055507fa1118dee1090d6d6ff8159e78fe2197886cf76c285e18669d2d8fbac3195c4aa89836060015184602001518560800151896040516140d495949392919073ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b60405180910390a1505050505050505050565b6140ef614371565b5f73ffffffffffffffffffffffffffffffffffffffff8216614156576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d3a565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6122e38133614b9a565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081526009602090815260408083206001810154600390910154909416808452600c90925282208054919284926141f99084906153c0565b909155505073ffffffffffffffffffffffffffffffffffffffff8084165f90815260096020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116825560018201839055600282019290925560038101805483169055600401805490911690556116b890821684846142f0565b5f80858560ff80861690871611156142b3576142978587615405565b6142a290600a61553f565b6142ac908261554d565b90506142e3565b8460ff168660ff1610156142e3576142cb8686615405565b6142d690600a61553f565b6142e0908361554d565b91505b9097909650945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526116b891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614c21565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146116cd576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610d3a565b5f82815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615614480575f83815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016109f9565b505f6109f9565b5f6109f960088054806020026020016040519081016040528092919081815260200182805480156144ec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116144c1575b505050505083614cc0565b60605f6001845161450891906153c0565b67ffffffffffffffff81111561452057614520614f43565b604051908082528060200260200182016040528015614549578160200160208202803683370190505b5090505f805b8551811015614620578473ffffffffffffffffffffffffffffffffffffffff1686828151811061458157614581615564565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160315614618578581815181106145b7576145b7615564565b60200260200101518383806145cb90615591565b9450815181106145dd576145dd615564565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60010161454f565b5090949350505050565b5f82815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16614480575f83815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016109f9565b6146f3614d44565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b5f5474010000000000000000000000000000000000000000900460ff16156116cd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6109f960078054806020026020016040519081016040528092919081815260200182805480156144ec57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116144c157505050505083614cc0565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526112ba9186918216906323b872dd9060840161432a565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6148eb614767565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861473d3390565b73ffffffffffffffffffffffffffffffffffffffff8181165f908152600a60205260408082206003015490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919216906370a0823190602401602060405180830381865afa1580156149ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149f29190615361565b73ffffffffffffffffffffffffffffffffffffffff8084165f908152600a60205260409020600181015460039091015492935091169030908381811015614a91576040517f861da4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401610d3a565b5050505073ffffffffffffffffffffffffffffffffffffffff82165f908152600a602052604090206002015415614b175773ffffffffffffffffffffffffffffffffffffffff8083165f908152600a6020908152604080832060028101546004909101549094168352600d90915281208054909190614b119084906153c0565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600a6020526040812060018101805460038301805484547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168655938690556002850195909555828516905560049092018054909116905591166112ba8185846142f0565b5f82815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611234576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610d3a565b5f5f60205f8451602086015f885af180614c40576040513d5f823e3d81fd5b50505f513d91508115614c57578060011415614c71565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156112ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d3a565b5f80805b84518161ffff161015614d3c578373ffffffffffffffffffffffffffffffffffffffff16858261ffff1681518110614cfe57614cfe615564565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603614d2a5760019150614d3c565b80614d34816155c8565b915050614cc4565b509392505050565b5f5474010000000000000000000000000000000000000000900460ff166116cd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215614e0f579160200282015b82811115614e0f57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614db5565b50614e1b929150614e1f565b5090565b5b80821115614e1b575f8155600101614e20565b5f60208284031215614e43575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114614e72575f5ffd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614e9c575f5ffd5b919050565b5f60208284031215614eb1575f5ffd5b614e7282614e79565b60a081016109f9828473ffffffffffffffffffffffffffffffffffffffff8151168252602081015160208301526040810151604083015273ffffffffffffffffffffffffffffffffffffffff606082015116606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b60ff811681146122e3575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614f7f575f5ffd5b813567ffffffffffffffff811115614f9957614f99614f43565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561500557615005614f43565b60405281815283820160200185101561501c575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f60c0878903121561504d575f5ffd5b61505687614e79565b955061506460208801614e79565b945060408701359350606087013561507b81614f35565b92506080870135915060a087013567ffffffffffffffff81111561509d575f5ffd5b6150a989828a01614f70565b9150509295509295509295565b5f602082840312156150c6575f5ffd5b5035919050565b5f5f604083850312156150de575f5ffd5b823591506150ee60208401614e79565b90509250929050565b602080825282518282018190525f918401906040840190835b8181101561514457835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101615110565b509095945050505050565b5f5f5f60608486031215615161575f5ffd5b833561516c81614f35565b92506020840135915061518160408501614e79565b90509250925092565b5f5f5f5f5f5f60c0878903121561519f575f5ffd5b6151a887614e79565b9550602087013561506481614f35565b5f5f604083850312156151c9575f5ffd5b82356151d481614f35565b946020939093013593505050565b5f5f5f5f608085870312156151f5575f5ffd5b8435935060208501359250604085013561520e81614f35565b9150606085013561521e81614f35565b939692955090935050565b5f5f5f6060848603121561523b575f5ffd5b61524484614e79565b925060208401359150604084013561525b81614f35565b809150509250925092565b5f5f5f5f5f5f60c0878903121561527b575f5ffd5b61528487614e79565b9550602087013561529481614f35565b94506040870135935061507b60608801614e79565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015273ffffffffffffffffffffffffffffffffffffffff8416606082015282608082015260c060a08201525f82518060c0840152806020850160e085015e5f60e0828501015260e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116840101915050979650505050505050565b5f60208284031215615371575f5ffd5b5051919050565b5f60208284031215615388575f5ffd5b8151614e7281614f35565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156109f9576109f9615393565b5f602082840312156153e3575f5ffd5b81518015158114614e72575f5ffd5b808201808211156109f9576109f9615393565b60ff82811682821603908111156109f9576109f9615393565b6001815b60018411156154595780850481111561543d5761543d615393565b600184161561544b57908102905b60019390931c928002615422565b935093915050565b5f8261546f575060016109f9565b8161547b57505f6109f9565b8160018114615491576002811461549b576154b7565b60019150506109f9565b60ff8411156154ac576154ac615393565b50506001821b6109f9565b5060208310610133831016604e8410600b84101617156154da575081810a6109f9565b6155057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461541e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561553757615537615393565b029392505050565b5f614e7260ff841683615461565b80820281158282048414176109f9576109f9615393565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155c1576155c1615393565b5060010190565b5f61ffff821661ffff81036155df576155df615393565b6001019291505056fea26469706673582212204913ad2b2fa6be48b678f53c509815da8af49b37aca6a22bdcb44132f5995bce64736f6c634300081e0033

Verified Source Code Partial Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: Yes (10000000 runs)
Broker.sol 4000 lines
// SPDX-License-Identifier: MIT
pragma solidity <0.9.0 =0.8.30 >=0.4.16 >=0.4.22 >=0.6.2 >=0.8.4 ^0.8.20;

// lib/openzeppelin-contracts/contracts/utils/Context.sol

// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// src/Errors.sol

contract Errors {
    error ApprovalExceedsDeposit(
        address depositor, address collateral, uint256 deposit, address token, uint256 approval
    );
    error ApprovalSubceedsRedemption(
        address redeemer, address token, uint256 redemption, address collateral, uint256 approval
    );
    error CollateralExists(address addr);
    error CollateralNotFound(address addr);
    error CollateralUnsupported(address addr);
    error DepositPending();
    error FinancierExists(address addr);
    error FinancierNotFound(address addr);
    error IncorrectData();
    error InsufficientBalance(address token, address owner, uint256 amount, uint256 balance);
    error InvalidAddress(address addr);
    error NoBeneficiarySet();
    error NoDepositFound();
    error NoRedemptionFound();
    error PendingRedemption();
    error RedemptionAlreadyApproved(address redeemer);
    error RedemptionNotApproved();
    error TokenNotSet();
    error Unauthorized();
    error UnsupportedToken(uint8 id);
    error PendingSwap();
    error NoSwapFound();
}

// lib/openzeppelin-contracts/contracts/access/IAccessControl.sol

// OpenZeppelin Contracts (last updated v5.4.0) (access/IAccessControl.sol)

/**
 * @dev External interface of AccessControl declared to support ERC-165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted to signal this.
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

// lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol

// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol

// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// src/Structs.sol

/// @notice Struct to store a deposit request.
/// @dev On create the amountApproved must be 0.
/// @dev After processing if the amountApproved is 0, the request was rejected.
struct DepositRecord {
    address depositor;
    uint256 amount;
    uint256 amountApproved;
    address collateral;
    address token;
}

/// @notice Struct to store a redemption request.
/// @dev On create the amountApproved must be 0.
/// @dev After processing if the amountApproved is 0, the request was rejected.
struct RedemptionRecord {
    address redeemer;
    uint256 amount;
    uint256 amountApproved;
    address token;
    address collateral;
}

/// @notice Struct to store a swap request.
/// @dev On create the amountApproved must be 0.
/// @dev After processing if the amountApproved is 0, the request was rejected.
struct SwapRecord {
    address swapper;
    uint256 amount;
    uint256 amountApproved;
    address inputToken;
    address outputToken;
}

// lib/forge-std/src/console.sol

library console {
    address constant CONSOLE_ADDRESS =
        0x000000000000000000636F6e736F6c652e6c6f67;

    function _sendLogPayloadImplementation(bytes memory payload) internal view {
        address consoleAddress = CONSOLE_ADDRESS;
        /// @solidity memory-safe-assembly
        assembly {
            pop(
                staticcall(
                    gas(),
                    consoleAddress,
                    add(payload, 32),
                    mload(payload),
                    0,
                    0
                )
            )
        }
    }

    function _castToPure(
      function(bytes memory) internal view fnIn
    ) internal pure returns (function(bytes memory) pure fnOut) {
        assembly {
            fnOut := fnIn
        }
    }

    function _sendLogPayload(bytes memory payload) internal pure {
        _castToPure(_sendLogPayloadImplementation)(payload);
    }

    function log() internal pure {
        _sendLogPayload(abi.encodeWithSignature("log()"));
    }

    function logInt(int256 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
    }

    function logUint(uint256 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
    }

    function logString(string memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function logBool(bool p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function logAddress(address p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function logBytes(bytes memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
    }

    function logBytes1(bytes1 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
    }

    function logBytes2(bytes2 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
    }

    function logBytes3(bytes3 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
    }

    function logBytes4(bytes4 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
    }

    function logBytes5(bytes5 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
    }

    function logBytes6(bytes6 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
    }

    function logBytes7(bytes7 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
    }

    function logBytes8(bytes8 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
    }

    function logBytes9(bytes9 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
    }

    function logBytes10(bytes10 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
    }

    function logBytes11(bytes11 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
    }

    function logBytes12(bytes12 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
    }

    function logBytes13(bytes13 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
    }

    function logBytes14(bytes14 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
    }

    function logBytes15(bytes15 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
    }

    function logBytes16(bytes16 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
    }

    function logBytes17(bytes17 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
    }

    function logBytes18(bytes18 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
    }

    function logBytes19(bytes19 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
    }

    function logBytes20(bytes20 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
    }

    function logBytes21(bytes21 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
    }

    function logBytes22(bytes22 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
    }

    function logBytes23(bytes23 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
    }

    function logBytes24(bytes24 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
    }

    function logBytes25(bytes25 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
    }

    function logBytes26(bytes26 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
    }

    function logBytes27(bytes27 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
    }

    function logBytes28(bytes28 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
    }

    function logBytes29(bytes29 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
    }

    function logBytes30(bytes30 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
    }

    function logBytes31(bytes31 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
    }

    function logBytes32(bytes32 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
    }

    function log(uint256 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
    }

    function log(int256 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
    }

    function log(string memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function log(bool p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function log(address p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function log(uint256 p0, uint256 p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
    }

    function log(uint256 p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
    }

    function log(uint256 p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
    }

    function log(uint256 p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
    }

    function log(string memory p0, uint256 p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
    }

    function log(string memory p0, int256 p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,int256)", p0, p1));
    }

    function log(string memory p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
    }

    function log(string memory p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
    }

    function log(string memory p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
    }

    function log(bool p0, uint256 p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
    }

    function log(bool p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
    }

    function log(bool p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
    }

    function log(bool p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
    }

    function log(address p0, uint256 p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
    }

    function log(address p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
    }

    function log(address p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
    }

    function log(address p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
    }

    function log(uint256 p0, uint256 p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
    }

    function log(uint256 p0, uint256 p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
    }

    function log(uint256 p0, uint256 p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
    }

    function log(uint256 p0, uint256 p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
    }

    function log(uint256 p0, string memory p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
    }

    function log(uint256 p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
    }

    function log(uint256 p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
    }

    function log(uint256 p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
    }

    function log(uint256 p0, bool p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
    }

    function log(uint256 p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
    }

    function log(uint256 p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
    }

    function log(uint256 p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
    }

    function log(uint256 p0, address p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
    }

    function log(uint256 p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
    }

    function log(uint256 p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
    }

    function log(uint256 p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
    }

    function log(string memory p0, uint256 p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
    }

    function log(string memory p0, uint256 p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
    }

    function log(string memory p0, uint256 p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
    }

    function log(string memory p0, uint256 p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
    }

    function log(string memory p0, address p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
    }

    function log(string memory p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
    }

    function log(string memory p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
    }

    function log(string memory p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
    }

    function log(bool p0, uint256 p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
    }

    function log(bool p0, uint256 p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
    }

    function log(bool p0, uint256 p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
    }

    function log(bool p0, uint256 p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
    }

    function log(bool p0, bool p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
    }

    function log(bool p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
    }

    function log(bool p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
    }

    function log(bool p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
    }

    function log(bool p0, address p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
    }

    function log(bool p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
    }

    function log(bool p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
    }

    function log(bool p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
    }

    function log(address p0, uint256 p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
    }

    function log(address p0, uint256 p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
    }

    function log(address p0, uint256 p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
    }

    function log(address p0, uint256 p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
    }

    function log(address p0, string memory p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
    }

    function log(address p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
    }

    function log(address p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
    }

    function log(address p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
    }

    function log(address p0, bool p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
    }

    function log(address p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
    }

    function log(address p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
    }

    function log(address p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
    }

    function log(address p0, address p1, uint256 p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
    }

    function log(address p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
    }

    function log(address p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
    }

    function log(address p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
    }

    function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, bool p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
    }

    function log(uint256 p0, address p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint256 p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memo...

// [truncated — 162677 bytes total]

Read Contract

DEFAULT_ADMIN_ROLE 0xa217fddf → bytes32
FINANCE_ROLE 0x349b5954 → bytes32
OPERATOR_ROLE 0xf5b541a6 → bytes32
beneficiary0 0x68e91bba → address
beneficiary1 0x4f52ccfa → address
collateralBalanceLessDeposits 0x5a628abd → uint256
collateralObligation 0x4e36519b → uint256
collaterals 0x4113e5ca → address[]
deposit 0xf340fa01 → tuple
financiers 0xde9db776 → address[]
getRoleAdmin 0x248a9ca3 → bytes32
hasRole 0x91d14854 → bool
isFinancier 0x2f08d075 → bool
normAmounts 0xc3f2e9e4 → uint256, uint256
operator 0x570ca735 → address
owner 0x8da5cb5b → address
paused 0x5c975abb → bool
redemption 0x6fc9e257 → tuple
supportsInterface 0x01ffc9a7 → bool
swap 0x03438dd0 → tuple
usdm0 0x649585e1 → address
usdm1 0xb7912f42 → address

Write Contract 26 functions

These functions modify contract state and require a wallet transaction to execute.

addCollateral 0xf0d2d5a8
address collateral
addFinancier 0x728b85fe
address financier
approveRedemption 0xf3248142
address redeemer
uint8 tokenId_
uint256 amount
address collateral
uint256 amountApproved
string error_
assignBeneficiary0 0xe6299895
address beneficiary0_
assignBeneficiary1 0xf99d1263
address beneficiary1_
assignOperator 0x84385c6f
address operator_
assignUSDM0 0x8e23321e
address usdm0_
assignUSDM1 0x6e6dbb16
address usdm1_
cancelDeposit 0x6d14c2f6
address depositor
cancelRedemption 0xb3ba3f05
address redeemer
cancelSwap 0x3047d9f7
address swapper
deposit 0xf19ed6be
address collateral
uint256 amount
uint8 tokenId
grantRole 0x2f2ff15d
bytes32 role
address account
pause 0x8456cb59
No parameters
processDeposit 0x1e38e470
address depositor
address collateral
uint256 amount
uint8 tokenId_
uint256 amountApproved
string error_
processRedemption 0x6b6f8aeb
address redeemer
processSwap 0x96f94971
address swapper
uint8 inputTokenId
uint256 amount
uint8 outputTokenId
uint256 amountApproved
string error_
redeem 0x6c988ca2
uint8 tokenId
uint256 amount
address collateral
removeCollateral 0xc99d3a06
address collateral
removeFinancier 0x2e6f95c0
address financier
renounceOwnership 0x715018a6
No parameters
renounceRole 0x36568abe
bytes32 role
address callerConfirmation
revokeRole 0xd547741f
bytes32 role
address account
swapTokens 0xac51cc33
uint8 inputTokenId
uint256 amount
transferOwnership 0xf2fde38b
address newOwner
unpause 0x3f4ba83a
No parameters

Recent Transactions

No transactions found for this address