0 txs
1 call
constructor
constructor(string _name, uint256 _quoterGasLimit, address _router, address _quoter, address _factory)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deployers
viewfunction deployers(bytes32, uint256) view returns (address)
FACTORY
viewfunction FACTORY() view returns (address)
getDeployers
viewfunction getDeployers(bytes32 key) view returns (address[])
getQuoteForPool
viewfunction getQuoteForPool(address pool, uint256 amount, address tokenIn, address tokenOut, bool exactIn) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAINTAINER_ROLE
viewfunction MAINTAINER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
query
viewfunction query(uint256 _amount, address _tokenIn, address _tokenOut, bool _exactIn) view returns (uint256, address)
queryWithDeployer
viewfunction queryWithDeployer(uint256 _amount, address _tokenIn, address _tokenOut, bool _exactIn) view returns (uint256, address, address)
quoter
viewfunction quoter() view returns (address)
quoterGasLimit
viewfunction quoterGasLimit() view returns (uint256)
ROUTER
viewfunction ROUTER() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tempPoolAddress
viewfunction tempPoolAddress() view returns (address)
addCustomDeployer
nonpayablefunction addCustomDeployer(address deployer, address tokenA, address tokenB)
addMaintainer
nonpayablefunction addMaintainer(address addedMaintainer)
algebraSwapCallback
nonpayablefunction algebraSwapCallback(int256 amount0Delta, int256 amount1Delta, bytes)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
recoverERC20
nonpayablefunction recoverERC20(address _tokenAddress, uint256 _tokenAmount)
recoverETH
nonpayablefunction recoverETH(uint256 _amount)
removeCustomDeployer
nonpayablefunction removeCustomDeployer(address tokenA, address tokenB, uint256 index)
removeMaintainer
nonpayablefunction removeMaintainer(address removedMaintainer)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role)
revokeAllowance
nonpayablefunction revokeAllowance(address _token, address _spender)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setQuoter
nonpayablefunction setQuoter(address newQuoter)
setQuoterGasLimit
nonpayablefunction setQuoterGasLimit(uint256 newGasLimit)
swap
nonpayablefunction swap(uint256 _amountIn, uint256 _amountOut, address _fromToken, address _toToken, address _to)
swap
nonpayablefunction swap(uint256 _amountIn, uint256 _amountOut, address _tokenIn, address _tokenOut, address _to, address _deployer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
QuoterGasLimitSet
event QuoterGasLimitSet(uint256 newGasLimit)
QuoterSet
event QuoterSet(address quoter)
Recovered
event Recovered(address indexed _asset, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
YakAdapterSwap
event YakAdapterSwap(address indexed _tokenFrom, address indexed _tokenTo, uint256 _amountIn, uint256 _amountOut)
errors
AddressZero
error AddressZero()
ETHTransferFailed
error ETHTransferFailed()
InsufficientAmount
error InsufficientAmount()
InsufficientAmountOut
error InsufficientAmountOut(uint256 amountOut, uint256 requiredAmount)
InvalidAdapterName
error InvalidAdapterName()
InvalidGasLimit
error InvalidGasLimit()
InvalidQuery
error InvalidQuery()
NothingToRecover
error NothingToRecover()
NotPoolAddress
error NotPoolAddress()
OnlyMaintainer
error OnlyMaintainer()
creation bytecode
0x60c0604052346100555761001d6100146101b8565b939290926101f3565b604051612f1061072f823960805181818161075d015281816126ca0152612768015260a0518181816107cb01526124760152612f1090f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b90601f01601f191681019081106001600160401b0382111761008e57604052565b610059565b906100a76100a060405190565b928361006d565b565b6001600160401b03811161008e57602090601f01601f19160190565b90825f9392825e0152565b909291926100e56100e0826100a9565b610093565b9381855281830111610055576100a79160208501906100c5565b9080601f83011215610055578151610119926020016100d0565b90565b805b0361005557565b905051906100a78261011c565b6001600160a01b031690565b6001600160a01b03811661011e565b905051906100a78261013e565b919060a0838203126100555782516001600160401b03811161005557816101829185016100ff565b926101908260208301610125565b926101196101a1846040850161014d565b9360806101b1826060870161014d565b940161014d565b6101d661365f803803806101cb81610093565b92833981019061015a565b9091929394565b6101326101196101199290565b610119906101dd565b6101ff9094929461026f565b6102085f6101ea565b6001600160a01b0381166001600160a01b03841614908115610253575b50610242576100a79361023d9260805260a052610571565b610644565b639fabe1c160e01b5f908152600490fd5b6001600160a01b031690506001600160a01b038516145f610225565b6100a790610443565b6101196101196101199290565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156102b9575b60208310146102b457565b610285565b91607f16916102a9565b915f1960089290920291821b911b5b9181191691161790565b91906102ed6101196102f593610278565b9083546102c3565b9055565b6100a7915f916102dc565b81811061030f575050565b8061031c5f6001936102f9565b01610304565b9190601f811161033157505050565b6103416100a7935f5260205f2090565b906020601f840181900483019310610363575b6020601f909101040190610304565b9091508190610354565b90610376815190565b906001600160401b03821161008e57610399826103938554610299565b85610322565b602090601f83116001146103d2576102f592915f91836103c7575b50505f19600883021c1916906002021790565b015190505f806103b4565b601f198316916103e5855f5260205f2090565b925f5b81811061042157509160029391856001969410610409575b50505002019055565b01515f196008601f8516021c191690555f8080610400565b919360206001819287870151815501950192016103e8565b906100a79161036d565b61044b610487565b805161045d6104595f610278565b9190565b1461046d576100a7906001610439565b630b388d8d60e11b5f908152600490fd5b6101195f610278565b6100a73361049c8161049761047e565b61064d565b5f51602061363f5f395f51905f5261064d565b6104ce6104ca335b5f51602061363f5f395f51905f5261066f565b1590565b6104db576100a79061050c565b6301c42f3160e61b5f908152600490fd5b905f19906102d2565b906105056101196102f592610278565b82546104ec565b6105155f610278565b81146105605761055b8161054b7f575efdb178bd088e0c8dfe86c45529c7829d6060a40bf6f6ef7628939f823c299360046104f5565b6040519182918290815260200190565b0390a1565b6304c5ed9760e51b5f908152600490fd5b6100a7906104af565b6105866104ca336104b7565b6104db576100a7906105df565b906001600160a01b03906102d2565b61011990610132906001600160a01b031682565b610119906105a2565b610119906105b6565b906105d86101196102f5926105bf565b8254610593565b6105eb6101325f6101ea565b6001600160a01b038216146102425761055b8161062a7fd49e613df4d0d30122478894996f20f61022fbd29fcc9f94142e1cb9ba8f85509360026105c8565b604051918291826001600160a01b03909116815260200190565b6100a79061057a565b906100a7916106b6565b905b5f5260205260405f2090565b90610659906105bf565b610119915f61068961068f936106825f90565b5082610657565b01610665565b5460ff1690565b9060ff906102d2565b906106af6101196102f592151590565b8254610696565b6106c36104ca838361066f565b6106cb575050565b6106e460016106df845f6106898682610657565b61069f565b6106fe6106f86106f2339390565b936105bf565b916105bf565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61072960405190565b5f90a456fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a71461022957806306fdde0314610224578063129be3811461021f578063230f11c71461021a578063248a9ca3146102155780632bc857a0146102105780632c8958f61461020b5780632dd31000146102065780632f2ff15d1461020157806332fe7b26146101fc57806336568abe146101f75780633935ecb4146101f2578063409d653d146101ed57806348f12791146101e8578063696ebc0a146101e35780636b453c1f146101de5780637ae26773146101d95780638980f11f146101d45780638bb9c5bf146101cf57806391d14854146101ca578063a217fddf146101c5578063aec23d8e146101c0578063c6bbd5a7146101bb578063d3335553146101b6578063d547741f146101b1578063d8baf7cf146101ac578063eab90da6146101a7578063eb289a89146101a2578063f2fde38b1461019d578063f35c4d4514610198578063f874225414610193578063f912c64b1461018e5763fe6cd70d0361000e57610d5d565b610d24565b610ceb565b610cd3565b610cbb565b610c9f565b610be0565b610b83565b610b6a565b610b52565b610b37565b610b13565b610acf565b610a95565b610a7d565b610a64565b610a2f565b6109fb565b6109ce565b61097f565b610908565b610878565b6107ef565b6107b6565b61079d565b610748565b61072c565b61069b565b61064e565b610616565b61056c565b6104f4565b610287565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361025957565b5f80fd5b9050359061026a8261022e565b565b90602082820312610259576102809161025d565b90565b9052565b34610259576102b46102a261029d36600461026c565b610d8b565b60405191829182901515815260200190565b0390f35b5f91031261025957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b906001600283049216801561033b575b602083101461033657565b6102ee565b91607f169161032b565b80545f9392916103616103578361031b565b8085529360200190565b91600181169081156103b0575060011461037a57505050565b61038b91929394505f5260205f2090565b915f925b81841061039c5750500190565b80548484015260209093019260010161038f565b92949550505060ff1916825215156020020190565b9061028091610345565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761043c57604052565b6103cf565b9061026a61045b9261045260405190565b938480926103c5565b03836103fc565b905f106104725761028090610441565b6102c2565b6102805f6001610462565b90825f9392825e0152565b6104ae6104b76020936104df936104a2815190565b80835293849260200190565b95869101610482565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b0190565b60208082526102809291019061048d565b34610259576105043660046102b8565b6102b461050f610477565b604051918291826104e3565b610280916008021c5b73ffffffffffffffffffffffffffffffffffffffff1690565b90610280915461051b565b6102805f600361053d565b61028390610524565b60208101929161026a9190610553565b346102595761057c3660046102b8565b6102b4610587610548565b6040519182918261055c565b80610252565b9050359061026a82610593565b61025281610524565b9050359061026a826105a6565b909160c082840312610259576105d28383610599565b926105e08160208501610599565b926105ee82604083016105af565b926102806105ff84606085016105af565b9360a061060f82608087016105af565b94016105af565b34610259576106356106293660046105bc565b94939093929192610fe6565b604051005b906020828203126102595761028091610599565b34610259576102b461066961066436600461063a565b611172565b6040515b9182918290815260200190565b610280916008021c81565b90610280915461067a565b6102805f6004610685565b34610259576106ab3660046102b8565b6102b4610669610690565b909182601f830112156102595781359167ffffffffffffffff831161025957602001926001830284011161025957565b91606083830312610259576106fb8284610599565b926107098360208301610599565b92604082013567ffffffffffffffff81116102595761072892016106b6565b9091565b346102595761063561073f3660046106e6565b929190916111fe565b34610259576107583660046102b8565b6102b47f0000000000000000000000000000000000000000000000000000000000000000610587565b91906040838203126102595761028090602061060f8286610599565b34610259576106356107b0366004610781565b906113d0565b34610259576107c63660046102b8565b6102b47f0000000000000000000000000000000000000000000000000000000000000000610587565b3461025957610635610802366004610781565b9061146b565b906104df81602093610553565b9061083561082e610824845190565b8084529260200190565b9260200190565b905f5b8181106108455750505090565b90919261085f6108586001928651610808565b9460200190565b929101610838565b602080825261028092910190610815565b34610259576102b461089361088e36600461063a565b61150f565b60405191829182610867565b801515610252565b9050359061026a8261089f565b608081830312610259576108c88282610599565b926102806108d984602085016105af565b9360606108e982604087016105af565b94016108a7565b90815260408101929161026a916020905b0190610553565b346102595761092461091b3660046108b4565b9291909161152b565b906102b461093160405190565b928392836108f0565b919060a0838203126102595761095081846105af565b9261095e8260208301610599565b9261028061096f84604085016105af565b9360806108e982606087016105af565b34610259576102b461066961099536600461093a565b93929092611603565b9091606082840312610259576102806109b784846105af565b9360406109c782602087016105af565b9401610599565b34610259576106356109e136600461099e565b91611891565b9060208282031261025957610280916105af565b3461025957610635610a0e3660046109e7565b61189c565b91906040838203126102595761028090602061060f82866105af565b3461025957610635610a42366004610a13565b906118f8565b9190604083820312610259576102809060206109c782866105af565b3461025957610635610a77366004610a48565b9061199b565b3461025957610635610a9036600461063a565b6119a5565b34610259576102b46102a2610aab366004610781565b906119ce565b6102806102806102809290565b6102805f610ab1565b610280610abe565b3461025957610adf3660046102b8565b6102b4610669610ac7565b909160608284031261025957610280610b0384846105af565b93604061060f82602087016105af565b3461025957610635610b26366004610aea565b91611a69565b6102805f600261053d565b3461025957610b473660046102b8565b6102b4610587610b2c565b3461025957610635610b6536600461063a565b611b39565b3461025957610635610b7d366004610781565b90611b5d565b3461025957610635610b963660046109e7565b611b67565b919060a08382031261025957610bb18184610599565b92610bbf8260208301610599565b92610280610bd084604085016105af565b93608061060f82606087016105af565b3461025957610635610bf3366004610b9b565b93929092611b91565b9190604083820312610259576102809060206109c78286610599565b905b5f5260205260405f2090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8054821015610c7357610c6b6001915f5260205f2090565b910201905f90565b610c26565b610c83906005610c18565b80548210156102595761028091610c9991610c53565b9061053d565b34610259576102b4610587610cb5366004610bfc565b90610c78565b3461025957610635610cce3660046109e7565b611bc7565b3461025957610635610ce636600461063a565b611caa565b3461025957610cfb3660046102b8565b6102b47f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95610669565b3461025957610635610d373660046109e7565b611d3b565b90815260608101939261026a929091604091610901905b6020830190610553565b34610259576102b4610d7c610d733660046108b4565b92919091611d44565b60405191939193849384610d3c565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610ddb575090565b61028091507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b6105246102806102809273ffffffffffffffffffffffffffffffffffffffff1690565b61028090610e27565b61028090610e4a565b9050519061026a82610593565b906020828203126102595761028091610e5c565b6040513d5f823e3d90fd5b9061026a610e9560405190565b92836103fc565b67ffffffffffffffff811161043c57602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b90610ee9610ee483610e9c565b610e88565b918252565b369037565b9061026a610f09610f0384610ed7565b93610e9c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160208401610eee565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190610f6c565b9290565b8203918211610f7757565b610f34565b6105246102806102809290565b61028090610f7c565b9073ffffffffffffffffffffffffffffffffffffffff905b9181191691161790565b90610fc4610280610fcb92610e53565b8254610f92565b9055565b90815260408101929161026a9160200152565b0152565b94939293919091611057610ffd600187858a611d6f565b602061101061100b89610e53565b610e53565b61101930610e53565b9061102360405190565b948592839182917f70a08231000000000000000000000000000000000000000000000000000000005b83526004830161055c565b03915afa801561115c5761109293610f68935f92611129575b5061108d91926110876110825f610ab1565b610ef3565b90611e57565b610f61565b82106110ff576110de6110e49161100b7fe2bdbc6b7225eb0a972ac943c485a6cc05f7c6811838bce8903f23200fb744fa956110d76110d05f610f89565b6003610fb4565b8588611fb3565b93610e53565b936110fa6110f160405190565b92839283610fcf565b0390a3565b7f5945ea56000000000000000000000000000000000000000000000000000000005f908152600490fd5b61108d925061114f9060203d602011611155575b61114781836103fc565b810190610e69565b91611070565b503d61113d565b610e7d565b6102809081565b6102809054611161565b6001611189610280926111825f90565b505f610c18565b01611168565b61028090610524565b610280905461118f565b9050519061026a826105a6565b9060208282031261025957610280916111a2565b9050519061026a8261089f565b9060208282031261025957610280916111c3565b91602061026a929493610fe260408201965f830190610553565b9250905061121461120f6003611198565b610524565b61121d33610524565b036113865761122b5f610ab1565b821315611344575061123f61100b33610e53565b602061124a60405190565b9182907f0dfe1681000000000000000000000000000000000000000000000000000000005b825260049082905afa801561115c575f926112a361129d61100b6112db946020968891611317575b50610e53565b91610ab1565b60405194859384928391907fa9059cbb00000000000000000000000000000000000000000000000000000000835233600484016111e4565b03925af1801561115c576112ec5750565b61130d9060203d602011611310575b61130581836103fc565b8101906111d0565b50565b503d6112fb565b6113379150873d891161133d575b61132f81836103fc565b8101906111af565b5f611297565b503d611325565b905061135261100b33610e53565b602061135d60405190565b9182907fd21220a70000000000000000000000000000000000000000000000000000000061126f565b7f136bd7cc000000000000000000000000000000000000000000000000000000005f908152600490fd5b9061026a916113c66113c182611172565b611fea565b9061026a91612015565b9061026a916113b0565b156113e157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015280608481015b0390fd5b61026a919061148b61147c33610524565b61148584610524565b146113da565b612087565b906114a961149f610824845490565b925f5260205f2090565b905f5b8181106114b95750505090565b9091926114da6114d36001926114ce87611198565b610808565b9460010190565b9291016114ac565b9061028091611490565b9061026a61045b926114fd60405190565b938480926114e2565b610280906114ec565b6115266102809161151e606090565b506005610c18565b611506565b611537939291906120e5565b91906115425f610ab1565b8114801561157d575b611553579190565b7f19e4cb10000000000000000000000000000000000000000000000000000000005f908152600490fd5b5061158a61120f5f610f89565b61159384610524565b1461154b565b6102806080610e88565b6115ab611599565b5f8082526020820181905260408201819052606082015290565b6102806115a3565b7f80000000000000000000000000000000000000000000000000000000000000008114610f77575f0390565b9061028390610524565b919361164d61165692946116446102809761161b5f90565b5061163e6116276115c5565b98861561165b5761163790610ab1565b60408a0152565b876115f9565b602086016115f9565b15156060840152565b612101565b61166761166c91610ab1565b6115cd565b611637565b91906116a56116a1335b7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab956119ce565b1590565b6116b25761026a926117cb565b7f710bcc40000000000000000000000000000000000000000000000000000000005f908152600490fd5b6116e861028391610524565b60601b90565b6014816117006104df938396956116dc565b0180926116dc565b91906008610faa91029161172f73ffffffffffffffffffffffffffffffffffffffff841b90565b921b90565b9190611745610280610fcb93610e53565b908354611708565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61026a915f91611734565b805480156117c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906117c36117bd8383610c53565b9061177a565b55565b61174d565b61026a9261180861181461188694610280946117e682610524565b6117ef82610524565b101561188b575b6040515b9384926020840192836116ee565b908103825203826103fc565b61182661181f825190565b9160200190565b209061188160059161187b61186b610c996118418787610c18565b6118656118556118518a8a610c18565b5490565b61185f6001610ab1565b90610f61565b90610c53565b916118768686610c18565b610c53565b90611734565b610c18565b611785565b906117f6565b9061026a9291611671565b61026a907f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab956113d0565b906118d36116a13361167b565b6116b25761026a91906118e861026a92610e53565b906118f25f610ab1565b91612258565b9061026a916118c6565b9061190f6116a13361167b565b6116b25761026a916119205f610ab1565b82146119715761196c6119628261100b8561195b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2896610e53565b3390612358565b9261066d60405190565b0390a2565b7faba3a548000000000000000000000000000000000000000000000000000000005f908152600490fd5b9061026a91611902565b61026a9033610802565b90610c1a90610e53565b610280905b60ff1690565b61028090546119b9565b610280915f6119e86119ee936119e15f90565b5082610c18565b016119af565b6119c4565b9190611a016116a13361167b565b6116b25761026a92611a36565b908154916801000000000000000083101561043c578261187b91600161026a95018155610c53565b90610280611808611a5161026a95611a64946117e682610524565b611a5c61181f825190565b206005610c18565b611a0e565b9061026a92916119f3565b611a806116a13361167b565b6116b25761026a90611aab565b3d15611aa657611a9c3d610ed7565b903d5f602084013e565b606090565b611ab45f610ab1565b811461197157611adb5f80611ac860405190565b5f9085335af1611ad6611a8d565b501590565b611b0f577f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2861196c61196261100b5f610f89565b7fb12d13eb000000000000000000000000000000000000000000000000000000005f908152600490fd5b61026a90611a74565b9061026a91611b536113c182611172565b9061026a91612087565b9061026a91611b42565b61026a907f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95611b5d565b936110de7fe2bdbc6b7225eb0a972ac943c485a6cc05f7c6811838bce8903f23200fb744fa9361100b6110e4938783878b612372565b61026a903390611bdf611bd8610abe565b91826113d0565b61146b565b611bf06116a13361167b565b6116b25761026a90611c3c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90610faa565b90611c35610280610fcb92610ab1565b8254611bfd565b611c455f610ab1565b8114611c8057611c7b816106697f575efdb178bd088e0c8dfe86c45529c7829d6060a40bf6f6ef7628939f823c29936004611c25565b0390a1565b7f98bdb2e0000000000000000000000000000000000000000000000000000000005f908152600490fd5b61026a90611be4565b611cbf6116a13361167b565b6116b25761026a90611cd361120f5f610f89565b611cdc82610524565b14611d1157611c7b816105877fd49e613df4d0d30122478894996f20f61022fbd29fcc9f94142e1cb9ba8f8550936002610fb4565b7f9fabe1c1000000000000000000000000000000000000000000000000000000005f908152600490fd5b61026a90611cb3565b91611d609391611d5b93611d555f90565b50611d6f565b6124e4565b9091611d6b30610e53565b9190565b61028092611db2611db992959395611d856115c5565b508415611dc257611d9590610ab1565b915b611da9611da2611599565b97886115f9565b602087016115f9565b6040850152565b15156060830152565b611667611dce91610ab1565b91611d97565b6102809051610524565b919060408382031261025957610280906020611dfa8286610e5c565b9401610e5c565b9193611e2d6102809694611db2611e4a9497611e2460a08801995f890190610553565b15156020870152565b73ffffffffffffffffffffffffffffffffffffffff166060830152565b608081840391015261048d565b9091611e6561120f5f610f89565b611e6e82610524565b03611f8b5750611e956110d0611e8383611dd4565b611e8f60208501611dd4565b90612759565b6040611eb5611ea383611dd4565b611eaf60208501611dd4565b90612868565b939092835f611eca61100b61100b6003611198565b92611f1e611ee187611edb30610e53565b93015190565b95611eeb60405190565b998a97889687957f128acb0800000000000000000000000000000000000000000000000000000000875260048701611e01565b03925af190811561115c575f928392611f58575b5015611f4a5750611f45610280916115cd565b610ab1565b6102809150611f45906115cd565b909250611f7d915060403d604011611f84575b611f7581836103fc565b810190611dde565b915f611f32565b503d611f6b565b611fae906110d090611f9c84611dd4565b611fa860208601611dd4565b916126b2565b611e95565b91611fbd30610e53565b611fcf611fc983610524565b91610524565b03611fd957505050565b611fe561026a93610e53565b612358565b61026a90339061294c565b9060ff90610faa565b9061200e610280610fcb92151590565b8254611ff5565b6120226116a183836119ce565b61202a575050565b612043600161203e845f6119e88682610c18565b611ffe565b6120576120516110de339390565b91610e53565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61208260405190565b5f90a4565b61209182826119ce565b612099575050565b6120ac5f61203e84826119e88682610c18565b6120ba6120516110de339390565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b61208260405190565b916120f69391611d5b93611d555f90565b509061028030610e53565b6060919061214161213761212361211785611dd4565b611eaf60208701611dd4565b909384612131604088015190565b91612a2b565b9490930151151590565b156121585715611f4a5750611f45610280916115cd565b9091901561216a575061028090610ab1565b6102809150610ab1565b91602061026a92949361090160408201965f830190610553565b1561219557565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608490fd5b61223361222d6102809263ffffffff1690565b60e01b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b90916122635f610ab1565b811480156122be575b61026a936122aa600494936122836122b99461218e565b61229063095ea7b361221a565b9261229a60405190565b96879460208601908152016111e4565b602082018103825203836103fc565b612bad565b50906122fa6020846122cf84610e53565b6122d830610e53565b6040518095819482936122ef63dd62ed3e60e01b90565b845260048401612174565b03915afa93841561115c576122aa60049461228361026a976122b9955f91612339575b5061232a611d6b5f610ab1565b1494505093945050935061226c565b612352915060203d6020116111555761114781836103fc565b5f61231d565b6122b96004926122aa61026a9561229063a9059cbb61221a565b60018484612384939796949597611d6f565b9361239161100b83610e53565b6370a08231916123a030610e53565b60206123ab60405190565b80946123b78760e01b90565b825281806123c8866004830161055c565b03915afa92831561115c575f936124c3575b5061240d6124096123ea5f610ab1565b9461108d6123f787610ef3565b9b6124015f610f89565b9c8d91611e57565b9690565b86106110ff5761242760209261100b61244b9a6003610fb4565b9361104c61243486610e53565b9161243e60405190565b9a8b948593849360e01b90565b03915afa90811561115c5761026a965f926124a2575b508111612470575b5050611fb3565b61249b917f000000000000000000000000000000000000000000000000000000000000000090612358565b5f80612469565b6124bc91925060203d6020116111555761114781836103fc565b905f612461565b6124dd91935060203d6020116111555761114781836103fc565b915f6123da565b905f9081906124f25f610f89565b9182856124fe81611dd4565b876125106020820192611e8f84611dd4565b61251985610524565b61252282610524565b03612680575b505061253382611dd4565b612542611fc961120f84611dd4565b10156126685761180861256961255784611dd4565b61256084611dd4565b906040516117fa565b61257461181f825190565b20956005956125866118518989610c18565b985b895b811015612659578a6125b86125a6610c99846118768e8e610c18565b6125af88611dd4565b611fa888611dd4565b6125c188610524565b6125ca82610524565b036125e6575b50506125df61258a9160010190565b9050612588565b906125f091612101565b60608c01511561262d578781115b61260a575b8b906125d0565b9650915061258a6125df612625610c99856118768d8d610c18565b939150612603565b6126365f610ab1565b81141580156125fe57506126495f610ab1565b8814806125fe57508781106125fe565b50975097505050509150509190565b61180861256961267783611dd4565b61188b8b611dd4565b61268b929550612101565b92875f612528565b60409061090161026a9496959396610d5360608401985f850190610553565b9161272b926020926126c15f90565b506126ee61100b7f0000000000000000000000000000000000000000000000000000000000000000610e53565b916126f860405190565b958694859384937f23da36cc00000000000000000000000000000000000000000000000000000000855260048501612693565b03915afa90811561115c575f91612740575090565b610280915060203d60201161133d5761132f81836103fc565b61272b9160209161278c61100b7f0000000000000000000000000000000000000000000000000000000000000000610e53565b9061279660405190565b8095819482936122ef63d9a641e160e01b90565b61028073fffd8963efd1fc6a506488495d951d5263988d26610f7c565b6127fc9073ffffffffffffffffffffffffffffffffffffffff165b9173ffffffffffffffffffffffffffffffffffffffff1690565b90039073ffffffffffffffffffffffffffffffffffffffff8211610f7757565b6102806401000276a3610f7c565b6128499073ffffffffffffffffffffffffffffffffffffffff166127e2565b019073ffffffffffffffffffffffffffffffffffffffff8211610f7757565b90611fc961287d916128775f90565b50610524565b109081156128a05761028061289061281c565b61289a6001610f7c565b9061282a565b6102806128ab6127aa565b6128b56001610f7c565b906127c7565b61028090610ab1565b6104df6128dc926020926128d6815190565b94859290565b93849101610482565b612923610280939261291d61291d937f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260170190565b906128c4565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000815260110190565b9061295a6116a182846119ce565b612962575050565b6118086102806114679361299461298461297e6129ac96612c55565b926128bb565b61298e6020610ab1565b90612d67565b9061299e60405190565b9384926020840192836128e5565b6040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352600483016104e3565b612a0f61026a94612a086060949897956129ff608086019a5f870190610553565b15156020850152565b6040830152565b019073ffffffffffffffffffffffffffffffffffffffff169052565b612a8a90612a7b612a8f949695612a3f5f90565b97612a4960405190565b9586946004602087017f90405d36000000000000000000000000000000000000000000000000000000008152016129de565b602082018103825203826103fc565b612ea9565b8391612a9a57509190565b90506107289192506020612aac825190565b818301019101611dde565b15612abe57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815280611467600482016020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b15612b2857565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608490fd5b5f91612bb98392610e53565b82602083519301915af1612bd4612bce611a8d565b91612ab7565b8051612be2611d6b5f610ab1565b11612bea5750565b612c06816020612bfb61026a945190565b8183010191016111d0565b612b21565b6102806102806102809273ffffffffffffffffffffffffffffffffffffffff1690565b6119be6102806102809290565b6102806014612c2e565b6102806102806102809260ff1690565b612c72612c6d61028092612c67606090565b50610e4a565b612c0b565b61298e612c7d612c3b565b612c45565b81810292918115918404141715610f7757565b91908201809211610f7757565b90612cab825190565b811015610c73570160200190565b8015610f77577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b61028090612cf8611d6b6102809460ff1690565b901c90565b15612d0457565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815280611467600482016020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b612d90611082612d8084612d7b6002610ab1565b612c82565b612d8a6002610ab1565b90612c95565b916030612da5612d9f5f610ab1565b85612ca2565b537f7800000000000000000000000000000000000000000000000000000000000000612dfa612df160019384935f1a612de6612de086610ab1565b89612ca2565b53612d7b6002610ab1565b612d8a83610ab1565b915b612e1d575b50509061028061028092612e17611d6b5f610ab1565b14612cfd565b9091612e2882610ab1565b831115612ea3577f3031323334353637383961626364656600000000000000000000000000000000612e5a600f610ab1565b8216906010821015610c73578392612e7a612e9792612e9d941a60f81b90565b5f1a612e868789612ca2565b53612e916004612c2e565b90612ce4565b93612cb9565b91612dfc565b91612e01565b5f8091612eb35f90565b50612ebe6002611198565b612ec86004611168565b9060208351930191fa90610280611a8d56fea2646970667358221220b23e4da321af27a86261e026d6904d7e8aec3e75533f18b6266ebdff438951f264736f6c634300081e0033339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000061a8000000000000000000000000056d32560f3bf27c7a1008a1c28f71154959d602a0000000000000000000000005d471a345208bdc3efd374375b3604c6040de4f70000000000000000000000006b692b588def775a92a6d0f3b6cccc8a4a4e5bb80000000000000000000000000000000000000000000000000000000000000010416c676562726156324164617074657200000000000000000000000000000000