0 txs
1 call
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER_ROLE
viewfunction DEPLOYER_ROLE() view returns (bytes32)
getArtifactAddresses
viewfunction getArtifactAddresses() view returns (address[])
getArtifactByAddress
viewfunction getArtifactByAddress(address artifactAddress) view returns (tuple)
getArtifactsAmount
viewfunction getArtifactsAmount() view returns (uint256)
getImplementation
viewfunction getImplementation(uint8 artifactType) view returns (address)
getImplementations
viewfunction getImplementations() view returns (address[])
getMorphoFactory
viewfunction getMorphoFactory() view returns (address)
getPendlePTOracle
viewfunction getPendlePTOracle() view returns (address)
getProxyPattern
viewfunction getProxyPattern() view returns (uint8)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
addArtifact
nonpayablefunction addArtifact(address artifactAddress, string description, uint8 artifactType, address deployer)
createEOMultiFeedAdapter
nonpayablefunction createEOMultiFeedAdapter(tuple[] baseFeeds, tuple[] quoteFeeds, uint8 outputDecimals, string description) returns (address)
createERC4626CappedFeedAdapter
nonpayablefunction createERC4626CappedFeedAdapter(address vault, string description, uint256 maxYearlyGrowthPercent, uint256 maxUpdateStep) returns (address)
createLPYAPFeed
nonpayablefunction createLPYAPFeed(address lpYAP, address tokenAFeed, address tokenBFeed, uint256 maxTickDeviation, string description) returns (address)
createMorphoOracle
nonpayablefunction createMorphoOracle(address baseVault, address baseFeed1, address baseFeed2, address quoteFeed1, uint8 baseTokenDecimals, uint8 quoteTokenDecimals, string description) returns (address)
createPendleLPFeed
nonpayablefunction createPendleLPFeed(address ptMarket, string description, uint32 twapDuration) returns (address)
createPendlePTFeedHybrid
nonpayablefunction createPendlePTFeedHybrid(address ptMarket, string description, uint32 twapDuration, uint256 baseDiscountPerYear) returns (address)
createPendlePTFeedLinearDiscount
nonpayablefunction createPendlePTFeedLinearDiscount(address ptToken, string description, uint256 baseDiscountPerYear) returns (address)
createPendlePTFeedTWAP
nonpayablefunction createPendlePTFeedTWAP(address ptMarket, string description, uint32 twapDuration, uint8 twapType) returns (address)
createSingleFeedAdapter
nonpayablefunction createSingleFeedAdapter(tuple feed, uint8 outputDecimals, string description) returns (address)
createSpectraPTFeed
nonpayablefunction createSpectraPTFeed(address ptToken, string description, uint256 initialImpliedAPY, uint8 discountType, uint8 decimals) returns (address)
createSpectraPTFeedHybrid
nonpayablefunction createSpectraPTFeedHybrid(address pool, string description, uint256 initialImpliedAPY, uint8 decimals) returns (address)
deleteArtifact
nonpayablefunction deleteArtifact(address artifactAddress)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address[] implementations, address morphoFactory, address ptOracle, address owner, address deployer, address artifactsInitialProxyOwner, uint8 proxyPattern)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setImplementation
nonpayablefunction setImplementation(uint8 artifactType, address implementation)
setInitialProxyOwner
nonpayablefunction setInitialProxyOwner(address initialProxyOwner)
setMorphoFactory
nonpayablefunction setMorphoFactory(address morphoFactory)
setPendlePTOracle
nonpayablefunction setPendlePTOracle(address pendlePTOracle)
setProxyPattern
nonpayablefunction setProxyPattern(uint8 proxyPattern)
events
ERC4626CappedFeedAdapterCreated
event ERC4626CappedFeedAdapterCreated(address indexed feed, address deployer)
ImplementationSet
event ImplementationSet(uint8 indexed artifactType, address implementation)
Initialized
event Initialized(uint64 version)
InitialProxyOwnerSet
event InitialProxyOwnerSet(address indexed initialProxyOwner)
LPYAPFeedCreated
event LPYAPFeedCreated(address indexed feed, address tokenAFeed, address tokenBFeed, uint256 maxTickDeviation, address deployer)
MorphoFactorySet
event MorphoFactorySet(address indexed morphoFactory)
MorphoOracleCreated
event MorphoOracleCreated(address indexed oracle, address deployer)
MultiFeedAdapterCreated
event MultiFeedAdapterCreated(address indexed feed, address deployer)
PendleLPFeedCreated
event PendleLPFeedCreated(address indexed feed, address deployer)
PendlePTHybridFeedCreated
event PendlePTHybridFeedCreated(address indexed feed, address deployer)
PendlePTLinearDiscountFeedCreated
event PendlePTLinearDiscountFeedCreated(address indexed feed, address deployer)
PendlePTOracleSet
event PendlePTOracleSet(address indexed ptOracle)
PendlePTTWAPFeedCreated
event PendlePTTWAPFeedCreated(address indexed feed, uint8 twapType, address deployer)
ProxyPatternSet
event ProxyPatternSet(uint8 proxyPattern)
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)
SingleFeedAdapterCreated
event SingleFeedAdapterCreated(address indexed feed, address deployer)
SpectraDeterministicOracleFactorySet
event SpectraDeterministicOracleFactorySet(address indexed spectraDeterministicOracleFactory)
SpectraPTFeedCreated
event SpectraPTFeedCreated(address indexed feed, uint8 discountType, address deployer)
SpectraPTHybridFeedCreated
event SpectraPTHybridFeedCreated(address indexed feed, address deployer)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
DeployerZeroAddress
error DeployerZeroAddress()
FailedDeployment
error FailedDeployment()
ImplementationZeroAddress
error ImplementationZeroAddress()
InitialProxyOwnerZeroAddress
error InitialProxyOwnerZeroAddress()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidImplementationsLength
error InvalidImplementationsLength()
InvalidInitialization
error InvalidInitialization()
InvalidProxyPattern
error InvalidProxyPattern()
MorphoFactoryZeroAddress
error MorphoFactoryZeroAddress()
NotInitializing
error NotInitializing()
OwnerZeroAddress
error OwnerZeroAddress()
creation bytecode
0x6080806040523460b4577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c1660a557506001600160401b036002600160401b0319828216016061575b60405161459e90816100b98239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80806052565b63f92ee8a960e01b8152600490fd5b5f80fdfe6080604081815260049081361015610015575f80fd5b5f925f3560e01c90816301ffc9a7146130bc5750806309aba2c4146130905780630baed9e914612d8357806319943ae414612b94578063248a9ca314612b5e5780632e595fef146127fb5780632f2ff15d146127b557806336568abe1461276f57806342961b251461244557806343217c591461241b57806345583b7a146123e757806345988e49146120eb5780634a0772aa146120c25780634be71c7614611dad5780634f08c77514611a52578063598a7f691461176f578063615f64fe146116c457806366ff912c14611635578063670c3bdd1461160d57806371ea5ec7146112965780637f789aec1461126d57806383cb26fe1461124857806386bacdb8146111c157806391d148541461116e5780639b998bfd14610e97578063a217fddf14610e7c578063a761641914610e40578063b208514b14610cda578063b95558d914610cbb578063c6781a4d14610c8e578063d547741f14610c44578063d671449f146108b0578063e572d0a71461057d578063ecd00261146105555763f85890da146101a2575f80fd5b34610551576060366003190112610551576101bb61312c565b916001600160401b039060243582811161054d576101dc90369083016131fb565b916101e56134b3565b600195865f526020966005885260018060a01b039687875f2054161561053d5760075460ff8160a01c166102188161310e565b806104b25750505f82815260058a5287902054608881901c62ffffff165f8051602061455283398151915217845260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf31789526037600984f0888116156104a25788905b1697883b1561049e57875163236b26ef60e21b8152911685820152606060248201528281806102a9606482018a613384565b60443560448301520381838c5af180156104945790839161047c575b5050867f2dfc3469dcf10b589544c2aac0192c99266145f6dc03b1f53dc770b01614df38898851338152a28551946102fc866131bf565b8552878501948186528681019333855288845260028a52878420915180519182116104695761032b835461346f565b8b601f8211610430575b50508a90601f83116001146103cf5761036592918691836103c4575b50508160011b915f199060031b1c19161790565b81555b01935192600c8410156103b157505082549051610100600160a81b0360089190911b1660ff929092166001600160a81b0319909116171790556103aa82613989565b5051908152f35b634e487b7160e01b825260219052602490fd5b015190505f80610351565b8386528b86208593929091601f198416888f5b82821061041757505084116103ff575b505050811b018155610368565b01515f1960f88460031b161c191690555f80806103f2565b84840151865589979095019493840193908101906103e2565b84875280872061045892601f860160051c820192861061045f575b601f0160051c019061359d565b5f8b610335565b909150819061044b565b634e487b7160e01b855260418752602485fd5b61048590613198565b61049057815f6102c5565b5080fd5b87513d85823e3d90fd5b8380fd5b875163b06ebf3d60e01b81528690fd5b806104be60029261310e565b0361052d57825f5260058a5288885f205416885191610a4091828401928484108985111761051a578492608094928e92613ad286398352168d82015260608b82015286606082015203019084f080156104945788809116610277565b634e487b7160e01b885260418a52602488fd5b875163203f544560e21b81528690fd5b8651632a3dfedf60e01b81528590fd5b8580fd5b8280fd5b838234610490578160031936011261049057602090515f805160206145328339815191528152f35b50346105515760803660031901126105515761059761312c565b916001600160401b039060243582811161054d576105b890369083016131fb565b916105c16134b3565b600a5f526020956005875260018060a01b039586865f205416156108a05760075460ff8160a01c166105f28161310e565b80610814575050600a5f9081526005895286902054608881901c62ffffff165f8051602061455283398151915217835260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf31788526037600983f0878116156108045787905b1696806007541691883b1561049e57875192638d23507f60e01b84528684015216602482015260a0604482015281818061069060a4820189613384565b604435606483015260643560848301520381838b5af180156107fa579082916107e3575b5050857f8fac1d845e96a414a99becb35678aec56d719c4730a78c8eb4453452950bffcd888751338152a28451936106eb856131bf565b845286840193600a85528581019233845287835260028952868320915180519182116107d05761071b835461346f565b601f81116107a2575b508990601f8311600114610756579180610365926001959487926103c45750508160011b915f199060031b1c19161790565b8385528a85209190601f198416865b8d82821061078c5750509160019594929183879593106103ff57505050811b018155610368565b6001859682939686015181550195019301610765565b6107ca908486528b8620601f850160051c8101918d861061045f57601f0160051c019061359d565b5f610724565b634e487b7160e01b845260418652602484fd5b6107ec90613198565b6107f757805f6106b4565b80fd5b86513d84823e3d90fd5b865163b06ebf3d60e01b81528590fd5b8061082060029261310e565b0361089057600a5f526005895287875f205416875191610a4091828401928484108885111761087d578492608094928d92613ad286398352168c82015260608a82015285606082015203019083f080156107fa5787809116610653565b634e487b7160e01b875260418952602487fd5b865163203f544560e21b81528590fd5b8551632a3dfedf60e01b81528490fd5b50346105515760e0366003190112610551576108ca61312c565b6108d2613158565b926108db61316e565b936108e4613142565b906108ed613273565b9360a43560ff8116809103610c40576001600160401b039560c435878111610c3c5761091c90369088016131fb565b986109256134b3565b8a546001600160a01b0395908616948515610c2c5786168c898c8315610c14575163313ce56760e01b815291508e90506020828c81865afa908115610c095790610bc8575b60ff915016604d8111610bb55796899593818f99948e829a989560ff97600a0a915b519a632ccb377d60e21b8c528b015260248a01521660448801521660648601521660848401528460a484015283600196600160c48601521660e48401528461010484015261012483015283610144830152816101648160209c8d945af1908115610494578391610b7f575b501695855190610a06826131bf565b8152878101948486528682019333855288845260028a528784209251805192831161046957610a35845461346f565b8b601f8211610b51575b50508a91601f8411600114610ae857509180610a73926001959487926103c45750508160011b915f199060031b1c19161790565b81555b01935192600c8410156103b157505082549051610100600160a81b0360089190911b1660ff929092166001600160a81b031990911617179055610ab882613989565b50817f94db49514f0cf5d266b56d1f8d565491766c8a518dd70f1ae36b66f3b72816e6848351338152a251908152f35b9190601f1984168587528c8088209488915b838310610b3a57505050916001959492918387959310610b22575b505050811b018155610a76565b01515f1960f88460031b161c191690555f8080610b15565b848601518755958101959485019491820191610afa565b858752808720610b7892601f870160051c820192871061045f57601f0160051c019061359d565b5f8b610a3f565b90508881813d8311610bae575b610b9681836131da565b8101031261055157518181168103610551575f6109f7565b503d610b8c565b634e487b7160e01b8e5260118a5260248efd5b506020813d602011610c01575b81610be2602093836131da565b81010312610bfd575160ff81168103610bfd5760ff9061096a565b8d80fd5b3d9150610bd5565b8d51903d90823e3d90fd5b9860ff94819997949a82949b60019a98949a9161098c565b8a5163a681d23d60e01b81528990fd5b8a80fd5b8880fd5b5034610551578060031936011261055157610c8a9135610c856001610c67613158565b938387525f805160206145728339815191526020528620015461356f565b613747565b5080f35b83346107f75760203660031901126107f757610cb8610cab61312c565b610cb3613519565b613918565b80f35b8382346104905781600319360112610490576020906003549051908152f35b50829034610490576020908160031936011261055157610cf861312c565b9083818051610d06816131bf565b6060815285810183905201526001600160a01b0391821684526002835280842081519490610d33866131bf565b8251828254610d418161346f565b90818452600190896001821691825f14610e1e575050600114610ddd575b505090610d71816001949303826131da565b8752015491610dac85870195610d8a60ff8616886134a7565b858389019560081c1685526060835198828a5251918901526080880190613384565b945191600c831015610dca5750858097500152511660608301520390f35b634e487b7160e01b815260218852602490fd5b84865288862094939250889186915b818310610e07575093945091925090820101610d7182610d5f565b8654858401850152958601958a9390920191610dec565b60ff19168187015292151560051b85019092019250610d719150839050610d5f565b5090346105515760203660031901126105515735600c81101561055157602092506001600160a01b0390610e7390613430565b54169051908152f35b83823461049057816003193601126104905751908152602090f35b5090346105515760e0366003190112610551576001600160401b03813581811161116a573660238201121561116a5760249280820135610ed681613283565b92610ee3875194856131da565b8184526020916024602086019160051b8301019136831161116657602401905b82821061114f5750505050610f16613158565b610f1e61316e565b92610f27613142565b956084356001600160a01b038181169690949087830361114b5760a4359186831683036111475760c435936003851015610bfd5760ff9b8d9a7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009d8e54809d1c16159c8c169b8c1580611140575b6001809e149081611136575b15908161112d575b5061111c578f8f8f9260ff9360016001600160401b031983161783556110fd575b5054901c16156110ed57898216156110dd57156110cd579261100e611018969593611008610cb394611002886110026110139a6135b3565b5061363d565b506137c6565b6138d3565b61387b565b600b93600b8351036110bf57895b858110611075578a8a8a8a611039578280f35b805460ff60401b1916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a181808280f35b8082889203611085575b01611026565b9050600c8110156110ad57806110a8866110a08a9488613447565b51168261380a565b61107f565b50634e487b7160e01b8a526021905288fd5b8851632d82677f60e01b8152fd5b8d516312cd6dbf60e01b81528a90fd5b8e51630962257960e11b81528b90fd5b8e51631afcd79f60e31b81528b90fd5b68ffffffffffffffffff1916680100000000000000011781555f610fca565b508e5163f92ee8a960e01b81528b90fd5b9050155f610fa9565b303b159150610fa1565b508d610f95565b8c80fd5b8b80fd5b83809161115b84613184565b815201910190610f03565b8980fd5b8480fd5b5090346105515781600319360112610551578160209360ff9261118f613158565b903582525f8051602061457283398151915286528282206001600160a01b039091168252855220549151911615158152f35b5082346107f757806003193601126107f75781516003805480835290835260208083019492937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b92915b8282106112315761122d8686611223828b03836131da565b5191829182613340565b0390f35b83548752958601956001938401939091019061120b565b83346107f75760203660031901126107f757610cb861126561312c565b61100e613519565b5050346104905760203660031901126104905735600381101561049057610cb890611013613519565b508290346104905760a0366003190112610490576112b261312c565b916112bb613158565b936112c461316e565b606435926001600160401b0391608435838111610551576112e890369086016131fb565b946112f16134b3565b60065f5260209860058a5260018060a01b0380895f205416156115fd5760075460ff8160a01c166113218161310e565b8061156f57505060065f90815260058c5289902054608881901c62ffffff165f8051602061455283398151915217865260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178b526037600986f08181161561155f5781905b16998a3b1561054d57895163367d154160e11b815290821681890152918116602483018190529316604482018190526064820183905260a060848301529084818b8183816113d360a482018f613384565b03925af18015611555578a949392918691611538575b505088519283528a830152818801523360608201527f64a35859288050fe549d45bb954e7bc0cde451fd5c09f9755d3f8ab85d43468e90608090a2845193611430856131bf565b845286840193600685528581019233845287835260028952868320915180519182116107d057611460835461346f565b601f811161150a575b508990601f83116001146114a65791806103659260019594879261149b5750508160011b915f199060031b1c19161790565b015190508c80610351565b8385528a85209190601f198416865b8d8282106114f45750509160019594929183879593106114dc57505050811b018155610368565b01515f1960f88460031b161c191690558b80806103f2565b60018596829396860151815501950193016114b5565b611532908486528b8620601f850160051c8101918d861061045f57601f0160051c019061359d565b8a611469565b611546919293949550613198565b61049e5790889291848c6113e9565b89513d87823e3d90fd5b895163b06ebf3d60e01b81528890fd5b8061157b60029261310e565b036115ed5760065f5260058c52818a5f2054168a5191610a4091828401928484108b8511176115da578f908593608095938892613ad287398452169082015260608d82015288606082015203019086f080156115555781809116611382565b634e487b7160e01b8a5260418c5260248afd5b895163203f544560e21b81528890fd5b8851632a3dfedf60e01b81528790fd5b838234610490578160031936011261049057905490516001600160a01b039091168152602090f35b83823461049057602036600319011261049057610c8a9082600161165761312c565b61165f613519565b818060a01b031692838352600260205282208261167c825461346f565b8061168b575b505001556139f2565b601f811184146116a0575081555b8287611682565b8282526116bb601f60208420920160051c820185830161359d565b81835555611699565b5082903461049057816003193601126104905780519161018083018381106001600160401b0382111761175c578252600b90600b8452610160366020860137805b8281106117195783518061122d8782613340565b600c811015611749576001906001600160a01b0361173682613430565b54166117428288613447565b5201611705565b634e487b7160e01b825260218652602482fd5b604185634e487b7160e01b5f525260245ffd5b50346105515760603660031901126105515761178961312c565b916001600160401b039060243582811161054d576117aa90369083016131fb565b946117b3613250565b906117bc6134b3565b60085f526020966005885260018060a01b0380875f2054161561053d5760075460ff8160a01c166117ec8161310e565b806119e957505060085f90815260058a5287902054608881901c62ffffff165f8051602061455283398151915217845260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf31789526037600984f0818116156104a25781905b16976001948260015416908a3b1561054d57908592918a51948593849363409afa1960e11b85528b8501521660248301526080604483015263ffffffff6118976084840188613384565b911660648301520381838c5af18015610494579083916119d5575b5050867fda6125abc973828e1862a29f88ca1ec9659d3c6a6dd2cae10a38bb2a4018c5f1898851338152a28551906118e9826131bf565b815287810194600886528682019333855288845260028a528784209251805192831161046957611919845461346f565b8b601f82116119a7575b50508a91601f841160011461195757509180610365926001959487926103c45750508160011b915f199060031b1c19161790565b9190601f1984168587528c8088209488915b838310611990575050509160019594929183879593106103ff57505050811b018155610368565b848601518755958101959485019491820191611969565b8587528087206119ce92601f870160051c820192871061045f57601f0160051c019061359d565b5f8b611923565b6119de90613198565b61049057815f6118b2565b806119f560029261310e565b0361052d5760085f5260058a5281885f205416885191610a4091828401928484108b85111761051a578492608094928792613ad286398352168d82015260608b82015286606082015203019084f08015610494578180911661184d565b5082903461049057608036600319011261049057611a6e61312c565b91602435936001600160401b039485811161055157611a9090369083016131fb565b611a98613250565b92611aa16134b3565b600591825f5260209783895260018060a01b0380885f20541615611d9d5760075460ff8160a01c16611ad28161310e565b80611d115750505f858152858b5288902054608881901c62ffffff165f8051602061455283398151915217855260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178a526037600985f081811615611d015781905b16986001978260015416908b3b15611cfd57908692918b519485938493631e8b34e160e11b85528c85015216602483015260a0604483015263ffffffff611b7a60a4840189613384565b9116606483015260643560848301520381838d5af18015611cf357908491611cdf575b5050877fa98010796c2dcaa64748d882372c2cc9859289461627958a5b6314bab3655eb08a8951338152a2865191611bd4836131bf565b8252888201958487528783019433865289855260028b528885209351908151938411611ccc578b611c05865461346f565b601f8111611c93575b5050508a91601f8411600114611c43575091806103659260019594879261149b5750508160011b915f199060031b1c19161790565b9190601f1984168587528c8088209488915b838310611c7c575050509160019594929183879593106114dc57505050811b018155610368565b848601518755958101959485019491820191611c55565b611cba9287895282892091601f8801821c8301938810611cc2575b601f01901c019061359d565b8b8b81611c0e565b9192508291611cae565b634e487b7160e01b865260418852602486fd5b611ce890613198565b61055157828a611b9d565b88513d86823e3d90fd5b8680fd5b885163b06ebf3d60e01b81528790fd5b80611d1d60029261310e565b03611d8d57855f52858b5281895f205416895191610a40918284019284841087851117611d7a57858f9193608095938795613ad287398452169082015260608c82015287606082015203019085f08015611cf35781809116611b30565b634e487b7160e01b895260418b52602489fd5b885163203f544560e21b81528790fd5b8751632a3dfedf60e01b81528690fd5b508290346104905760031992608036850112610551576001600160401b0390803582811161116a57611de2903690830161329a565b9160243581811161054d57611dfa903690840161329a565b946044359360ff85168095036104905760643583811161055157611e2190369086016131fb565b94611e2a6134b3565b60035f5260209860058a5260018060a01b0380895f205416156115fd5760075460ff8160a01c16611e5a8161310e565b8061205957505060035f90815260058c5289902054608881901c62ffffff165f8051602061455283398151915217865260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178b526037600986f08181161561155f575b1698893b1561116a57611f158593608093611f008a94611ef08e51998a988998630d43744b60e41b8a5289015260848801906133f0565b90838783030160248801526133f0565b91604485015283820301606484015289613384565b0381838b5af180156107fa57908291612045575b5050857f25cb6ab4d676eacf0a1b262c7d414e841460d951d330b13c1ff14cc2350bb486888751338152a2845193611f60856131bf565b845286840193600385528581019233845287835260028952868320915180519182116107d057611f90835461346f565b601f8111612017575b508990601f8311600114611fcb5791806103659260019594879261149b5750508160011b915f199060031b1c19161790565b8385528a85209190601f198416865b8d8282106120015750509160019594929183879593106114dc57505050811b018155610368565b6001859682939686015181550195019301611fda565b61203f908486528b8620601f850160051c8101918d861061045f57601f0160051c019061359d565b8a611f99565b61204e90613198565b6107f7578088611f29565b8061206560029261310e565b036115ed5760035f5260058c52818a5f2054168a5191610a4091828401928484108b8511176115da578f908593608095938892613ad287398452169082015260608d82015288606082015203019086f08015611555578116611eb9565b83823461049057816003193601126104905760015490516001600160a01b039091168152602090f35b50346105515760a03660031901126105515761210561312c565b916001600160401b039060243582811161054d5761212690369083016131fb565b946064359060018210156107f75761213c613273565b966121456134b3565b600292835f5260209860058a5260018060a01b0380895f205416156115fd576007548660ff8260a01c166121788161310e565b8061238057505f90815260058d528a902054608881901c62ffffff165f8051602061455283398151915217875260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178c52506037600986f08181161561155f5781905b16998a3b1561054d578951630d9543fb60e31b815291168782015260a060248201529084908290819060ff61220f60a4840189613384565b91604435604485015261222560648501896133e3565b1660848301520381838d5af18015611cf357848a928a92612366575b50507ff937fc89bf034e068f1e3a97131790de63f3dbdd4e919120271bd817e463e3c59192612272825180926133e3565b338c820152a2855190612284826131bf565b815287810194838652868201933385528884528952868320915180519182116107d0576122b1835461346f565b601f8111612338575b508990601f83116001146122ec579180610365926001959487926103c45750508160011b915f199060031b1c19161790565b8385528a85209190601f198416865b8d8282106123225750509160019594929183879593106103ff57505050811b018155610368565b60018596829396860151815501950193016122fb565b612360908486528b8620601f850160051c8101918d861061045f57601f0160051c019061359d565b5f6122ba565b9092506123739150613198565b610551578787845f612241565b6123898161310e565b036115ed57865f5260058c52818a5f2054168a5191610a4091828401928484108d8511176115da578f908593608095938892613ad287398452169082015260608d82015288606082015203019086f0801561155557818091166121d7565b5034610551573660031901126104905735600c81101561049057610cb89061240d613158565b90612416613519565b61380a565b83346107f75760203660031901126107f757610cb861243861312c565b612440613519565b6137c6565b508290346126e757366003190160a081126126e7576060136126e757805161246c816131bf565b833560038110156126e7578152602435936001600160a01b039182861686036126e7576020958682015260443583811681036126e757848201526124ae613263565b946001600160401b03916084358381116126e7576124cf90369086016131fb565b946124d86134b3565b60075f526005895280875f2054161561053d5760075460ff8160a01c166124fe8161310e565b806126eb57505060075f90815260058a5287812054608881901c62ffffff165f8051602061455283398151915217825260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178a52603790600990f0818116156104a2575b1696873b156126e75760ff906125838851936362ab4aff60e01b8552878501906133b5565b16606482015260a060848201525f81806125a060a4820189613384565b0381838b5af180156126dd576126cc575b50857f37be858b2ccacf33d24a1d68aa02b4a63c2815dfb0135a1854f066271b81447a888751338152a28451936125e7856131bf565b845286840193600785528581019233845287835260028952868320915180519182116107d057612617835461346f565b601f811161269e575b508990601f83116001146126525791806103659260019594879261149b5750508160011b915f199060031b1c19161790565b8385528a85209190601f198416865b8d8282106126885750509160019594929183879593106114dc57505050811b018155610368565b6001859682939686015181550195019301612661565b6126c6908486528b8620601f850160051c8101918d861061045f57601f0160051c019061359d565b8a612620565b6126d69150613198565b5f876125b1565b86513d5f823e3d90fd5b5f80fd5b806126f760029261310e565b0361052d5760075f5260058a5281885f205416885191610a4091828401928484108985111761275c578492608094928792613ad286398352168d82015260608b8201525f60608201520301905ff0801561275257811661255e565b87513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b50346126e757806003193601126126e757612788613158565b90336001600160a01b038316036127a657506127a49135613747565b005b5163334bd91960e11b81529050fd5b50346126e757806003193601126126e7576127a491356127f660016127d8613158565b93835f525f805160206145728339815191526020525f20015461356f565b6136d7565b50346126e75760803660031901126126e75761281561312c565b90602435926001600160401b03938481116126e75761283790369083016131fb565b90612840613263565b946128496134b3565b60095f526020956005875260018060a01b039586865f205416156108a05760075460ff8160a01c1661287a8161310e565b80612ae257505060095f81815260058a5287812054608881901c62ffffff165f8051602061455283398151915217825260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178a5260379190f0878116156108045787905b1696873b156126e75786516390db696760e01b815291168482015260806024820152905f908290819060ff612912608484018a613384565b9160443560448501521660648301520381838a5af18015612ad857612ac9575b50847f7db1854510999ef2c6259842ff80664b993096f1d434ecfbb2d47afe3f631d4e878651338152a2835192612968846131bf565b8352858301926009845284810191338352865f5260028852855f209151805191821161175c57612998835461346f565b601f8111612a9b575b508890601f8311600114612a355791806129d392600195945f92612a2a5750508160011b915f199060031b1c19161790565b81555b01925191600c831015612a17575082549051610100600160a81b0360089190911b1660ff929092166001600160a81b0319909116171790556103aa82613989565b602190634e487b7160e01b5f525260245ffd5b015190508b80610351565b90601f19831691845f528a5f20925f5b8c828210612a85575050916001959492918387959310612a6d575b505050811b0181556129d6565b01515f1960f88460031b161c191690558a8080612a60565b6001859682939686015181550195019301612a45565b612ac390845f528a5f20601f850160051c8101918c861061045f57601f0160051c019061359d565b896129a1565b612ad290613198565b86612932565b85513d5f823e3d90fd5b80612aee60029261310e565b036108905760095f526005895287875f205416875191610a40918284019284841088851117612b4b578492608094928d92613ad286398352168c82015260608a8201525f60608201520301905ff080156126dd57878091166128da565b604189634e487b7160e01b5f525260245ffd5b50346126e75760203660031901126126e757602091355f525f8051602061457283398151915282526001815f2001549051908152f35b50346126e75760803660031901126126e757612bae61312c565b6001600160401b03906024358281116126e757612bce90369086016131fb565b60443592600c8410156126e757612be3613142565b612beb613519565b855192612bf7846131bf565b8352602090612c0982850196876134a7565b6001600160a01b0390811684880190815294165f818152600283529690962092518051928311612d7057612c3d845461346f565b601f8111612d42575b5081601f8411600114612cda57509180612c7892600195945f92612ccf5750508160011b915f199060031b1c19161790565b81555b01915190600c821015612cbc5782549051610100600160a81b0360089190911b1660ff929092166001600160a81b0319909116171790556127a49150613989565b602185634e487b7160e01b5f525260245ffd5b015190508980610351565b9190601f198416855f52835f20935f905b828210612d2a575050916001959492918387959310612d12575b505050811b018155612c7b565b01515f1960f88460031b161c19169055888080612d05565b80600186978294978701518155019601940190612ceb565b612d6a90855f52835f20601f860160051c81019185871061045f57601f0160051c019061359d565b88612c46565b604188634e487b7160e01b5f525260245ffd5b50346126e75760803660031901126126e757612d9d61312c565b906001600160401b036024358181116126e757612dbd90369086016131fb565b93612dc6613250565b936064359560028710156126e757612ddc6134b3565b5f80526020966005885260018060a01b0380875f2054161561053d5760075460ff8160a01c16612e0b8161310e565b806130285750505f80805260058a5287812054608881901c62ffffff165f8051602061455283398151915217825260781b6001600160781b0319166e5af43d82803e903d91602b57fd5bf3178a52603790600990f0818116156104a25781905b169760019482600154168a3b156126e7575f928a5194859384936302e53f1560e11b85528b85015216602483015260a0604483015263ffffffff612eb260a4840189613384565b91166064830152612ec660848301876133a8565b0381838c5af180156127525788927f15ce7d3879fe7d7f8f648de3b1db0e4161a6379299190e2786c831014ec1a968928992613019575b50612f0a825180926133a8565b338b820152a2845190612f1c826131bf565b8152868101935f855285820192338452875f5260028952865f209251805192831161300657612f4b845461346f565b601f8111612fd8575b508991601f8411600114612f87575091806129d392600195945f92612a2a5750508160011b915f199060031b1c19161790565b9190601f198416855f528b5f20935f905b8d838310612fc057505050916001959492918387959310612a6d57505050811b0181556129d6565b84860151875595810195948501949190910190612f98565b61300090855f528b5f20601f860160051c8101918d871061045f57601f0160051c019061359d565b8a612f54565b604186634e487b7160e01b5f525260245ffd5b61302290613198565b8b612efd565b8061303460029261310e565b0361052d575f805260058a5281885f205416885191610a4091828401928484108b85111761275c578492608094928792613ad286398352168d82015260608b8201525f60608201520301905ff080156127525781809116612e6b565b50346126e7575f3660031901126126e757600754905160209160a01c60ff166130b88161310e565b8152f35b83346126e75760203660031901126126e757359063ffffffff60e01b82168092036126e757602091637965db0b60e01b81149081156130fd575b5015158152f35b6301ffc9a760e01b149050836130f6565b6003111561311857565b634e487b7160e01b5f52602160045260245ffd5b600435906001600160a01b03821682036126e757565b606435906001600160a01b03821682036126e757565b602435906001600160a01b03821682036126e757565b604435906001600160a01b03821682036126e757565b35906001600160a01b03821682036126e757565b6001600160401b0381116131ab57604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b038211176131ab57604052565b90601f801991011681019081106001600160401b038211176131ab57604052565b81601f820112156126e7578035906001600160401b0382116131ab576040519261322f601f8401601f1916602001856131da565b828452602083830101116126e757815f926020809301838601378301015290565b6044359063ffffffff821682036126e757565b6064359060ff821682036126e757565b6084359060ff821682036126e757565b6001600160401b0381116131ab5760051b60200190565b81601f820112156126e75780359060206132b383613283565b9360406132c360405196876131da565b84865282860191836060809702860101948186116126e7578401925b8584106132f0575050505050505090565b86848303126126e757825190613305826131bf565b84359060038210156126e7578287928a9452613322838801613184565b83820152613331868801613184565b868201528152019301926132df565b60209060206040818301928281528551809452019301915f5b828110613367575050505090565b83516001600160a01b031685529381019392810192600101613359565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060028210156131185752565b60409080516133c38161310e565b83528160208201519160018060a01b038093166020860152015116910152565b9060018210156131185752565b9081518082526020808093019301915f5b82811061340f575050505090565b909192938260608261342460019489516133b5565b01950193929101613401565b600c811015613118575f52600560205260405f2090565b805182101561345b5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90600182811c9216801561349d575b602083101461348957565b634e487b7160e01b5f52602260045260245ffd5b91607f169161347e565b600c8210156131185752565b335f9081527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020545f805160206145328339815191529060ff16156134fb5750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561355157565b60405163e2517d3f60e01b81523360048201525f6024820152604490fd5b805f525f8051602061457283398151915260205260405f20335f5260205260ff60405f205416156134fb5750565b8181106135a8575050565b5f815560010161359d565b6001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020545f805160206145728339815191529060ff16613637575f805260205260405f20815f5260205260405f20600160ff1982541617905533905f5f805160206145128339815191528180a4600190565b50505f90565b6001600160a01b03165f8181527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020545f8051602061453283398151915291905f805160206145728339815191529060ff166136d057825f5260205260405f20815f5260205260405f20600160ff1982541617905533915f805160206145128339815191525f80a4600190565b5050505f90565b90815f525f805160206145728339815191528060205260405f209160018060a01b031691825f5260205260ff60405f205416155f146136d057825f5260205260405f20815f5260205260405f20600160ff1982541617905533915f805160206145128339815191525f80a4600190565b90815f525f805160206145728339815191528060205260405f209160018060a01b031691825f5260205260ff60405f2054165f146136d057825f5260205260405f20815f5260205260405f2060ff19815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b5f80546001600160a01b0319166001600160a01b039290921691821781557f617370f36178428dc875efb4aa5e95dbb46606559302417e0b4475ba443b7e059080a2565b906001600160a01b031680156138695761382382613430565b80546001600160a01b03191682179055600c8210156131185760207f830d51bd3db318a35214cbb8d86fe13af846e7c23eeb283c257361d480dca3b891604051908152a2565b604051632a3dfedf60e01b8152600490fd5b60207fd1d4d100df0b44309929f432020253358549e7a1fa9195b6358f72a60fc73228916138a88161310e565b6007805460ff60a01b191660a083901b60ff60a01b16179055604051906138ce8161310e565b8152a1565b600180546001600160a01b0319166001600160a01b039290921691821790557f068219f19fc412d19bac599fa894ef21d81187fc5fb5295836dbe550a0fa782d5f80a2565b6001600160a01b0316801561395f57600780546001600160a01b031916821790557fe4f20b8ff02c86c40a29871dba01cb6f8813f970b7143cc2d70e11f6e64afec35f80a2565b604051631716186360e21b8152600490fd5b60035481101561345b5760035f5260205f2001905f90565b805f52600460205260405f2054155f146139ed57600354600160401b8110156131ab576139d66139c0826001859401600355613971565b819391549060031b91821b915f19901b19161790565b9055600354905f52600460205260405f2055600190565b505f90565b805f526004908160205260405f20548015155f146136d0575f1990808201818111613abe5760035490838201918211613aab57818103613a78575b5050506003548015613a6557810190613a4582613971565b909182549160031b1b191690556003555f526020525f6040812055600190565b603184634e487b7160e01b5f525260245ffd5b613a96613a876139c093613971565b90549060031b1c928392613971565b90555f528360205260405f20555f8080613a2d565b601186634e487b7160e01b5f525260245ffd5b601185634e487b7160e01b5f525260245ffdfe604060a08152610a408038038061001581610262565b92833981019060608183031261025e5761002e81610287565b9160209161003d838201610287565b8582015190916001600160401b03919082821161025e57019280601f8501121561025e57835161007461006f8261029b565b610262565b948186528686019287838301011161025e57815f9288809301855e86010152853b1561023e577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b038881166001600160a01b0319928316811790935589519098919691927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281511561022057505f61013b9381925190845af43d15610218573d9161012d61006f8461029b565b9283523d5f8985013e6102b6565b505b855191610433918284019081118482101761020457868492879461060d85391681520301905ff080156101fa57831691826080527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f857fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103958587549483519286168352820152a182156101e35716179055516102f3908161031a823960805181600f0152f35b8451633173bdd160e11b81525f6004820152602490fd5b84513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102b6565b925050503461022f575061013d565b63b398979f60e01b8152600490fd5b8651634c9c8ce360e01b81526001600160a01b0387166004820152602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020457604052565b51906001600160a01b038216820361025e57565b6001600160401b03811161020457601f01601f191660200190565b906102dd57508051156102cb57805190602001fd5b60405163d6bda27560e01b8152600490fd5b81511580610310575b6102ee575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156102e656fe60806040526001600160a01b03337f000000000000000000000000000000000000000000000000000000000000000082160361006a575f356001600160e01b03191663278f794360e11b14610060576040516334ad5dbb60e21b8152600490fd5b610068610105565b005b5f80917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156100a6573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e457604052565b6100aa565b67ffffffffffffffff81116100e457601f01601f191660200190565b3660041161018e57604036600319011261018e576004356001600160a01b0381169081900361018e576024359067ffffffffffffffff821161018e573660238301121561018e5781600401359061016361015e836100e9565b6100be565b91808352366024828601011161018e576020815f92602461018c97018387013784010152610192565b565b5f80fd5b90813b15610229577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a280511561020e5761020b9161024a565b50565b50503461021757565b60405163b398979f60e01b8152600490fd5b604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b5f8061027c93602081519101845af43d1561027f573d9161026d61015e846100e9565b9283523d5f602085013e610283565b90565b6060915b906102aa575080511561029857805190602001fd5b60405163d6bda27560e01b8152600490fd5b815115806102dd575b6102bb575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156102b356fea164736f6c6343000819000a60803460b457601f61043338819003918201601f19168301916001600160401b0383118484101760b85780849260209460405283398101031260b457516001600160a01b03908181169081900360b4578015609c575f80546001600160a01b03198116831782556040519316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361036690816100cd8239f35b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f915f3560e01c8063715018a6146102b35780638da5cb5b1461028c5780639623609d14610154578063ad3cb1cc146100e35763f2fde38b14610054575f80fd5b346100df5760203660031901126100df576001600160a01b038235818116939192908490036100db5761008561032e565b83156100c55750505f548260018060a01b03198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b51631e4fbdf760e01b8152908101849052602490fd5b5f80fd5b8280fd5b5082346101515780600319360112610151575080519080820182811067ffffffffffffffff82111761013e5761013a9350815260058252640352e302e360dc1b60208301525191829160208352602083019061030a565b0390f35b604184634e487b7160e01b5f525260245ffd5b80fd5b5060603660031901126100db576001600160a01b03823581811693908490036100db5760249182359081168091036100db5767ffffffffffffffff906044358281116100db57366023820112156100db578084013583811161027a57865191601f8201601f19908116603f0116830185811184821017610268578852818352368783830101116100db57815f92886020930183860137830101526101f661032e565b863b156100db57610228965f92875180998194829363278f794360e11b8452898401528a8a840152604483019061030a565b039134905af1801561025e5761023c578580f35b909192938095501161024d57505052005b604190634e487b7160e01b5f52525ffd5b84513d5f823e3d90fd5b87604188634e487b7160e01b5f52525ffd5b85604186634e487b7160e01b5f52525ffd5b50346100db575f3660031901126100db575f5490516001600160a01b039091168152602090f35b346100db575f3660031901126100db576102cb61032e565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f546001600160a01b0316330361034157565b60405163118cdaa760e01b8152336004820152602490fdfea164736f6c6343000819000a2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dfc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c0000000000000000003d602d80600a3d3981f3363d3d373d3d3d363d7300000002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a164736f6c6343000819000a