0 txs
15 calls
constructor
No 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)
getBeacons
viewfunction getBeacons() view returns (address[])
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 desc, uint8 artifactType, address deployer)
createEOMultiFeedAdapter
nonpayablefunction createEOMultiFeedAdapter(tuple[] baseFeeds, tuple[] quoteFeeds, uint8 outputDecimals, string description) returns (address)
createLpYapFeed
nonpayablefunction createLpYapFeed(address lpYap, address tokenAFeed, address tokenBFeed, string desc) returns (address)
createMorphoOracle
nonpayablefunction createMorphoOracle(address baseVault, address baseFeed1, address baseFeed2, address quoteFeed1, uint8 baseTokenDecimals, uint8 quoteTokenDecimals, string desc) returns (address)
createPendleLPFeed
nonpayablefunction createPendleLPFeed(address ptMarket, string desc, uint32 twapDuration) returns (address)
createPendlePTFeedHybrid
nonpayablefunction createPendlePTFeedHybrid(address ptMarket, string desc, uint32 twapDuration, uint256 baseDiscountPerYear) returns (address)
createPendlePTFeedLinearDiscount
nonpayablefunction createPendlePTFeedLinearDiscount(address ptToken, string desc, uint256 baseDiscountPerYear) returns (address)
createPendlePTFeedTWAP
nonpayablefunction createPendlePTFeedTWAP(address ptMarket, string desc, uint32 twapDuration, uint8 twapType) returns (address)
createSingleFeedAdapter
nonpayablefunction createSingleFeedAdapter(tuple feed, uint8 outputDecimals, string description) returns (address)
createSpectraPTFeed
nonpayablefunction createSpectraPTFeed(address ptToken, string desc, uint256 baseDiscountPerYear, uint8 discountType) 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)
initializeBeacons
nonpayablefunction initializeBeacons(address initialOwner)
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
ImplementationSet
event ImplementationSet(uint8 artifactType, address implementation)
Initialized
event Initialized(uint64 version)
InitialProxyOwnerSet
event InitialProxyOwnerSet(address indexed initialProxyOwner)
LpYapFeedCreated
event LpYapFeedCreated(address indexed feed, address tokenAFeed, address tokenBFeed, 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)
SpectraPTFeedCreated
event SpectraPTFeedCreated(address indexed feed, uint8 discountType, address deployer)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
BeaconsNotInitialized
error BeaconsNotInitialized()
BeaconZeroAddress
error BeaconZeroAddress()
DeployerZeroAddress
error DeployerZeroAddress()
ERC1167FailedCreateClone
error ERC1167FailedCreateClone()
ImplementationZeroAddress
error ImplementationZeroAddress()
InitialProxyOwnerZeroAddress
error InitialProxyOwnerZeroAddress()
InvalidInitialization
error InvalidInitialization()
InvalidProxyPattern
error InvalidProxyPattern()
MorphoFactoryZeroAddress
error MorphoFactoryZeroAddress()
NotInitializing
error NotInitializing()
OwnerZeroAddress
error OwnerZeroAddress()
creation bytecode
0x60808060405234601557615ed8908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a71461395d5750806309aba2c4146139315780630baed9e9146134a957806319943ae4146132c2578063248a9ca3146132765780632f2ff15d1461321a57806336568abe146131bb57806342961b2514612d7057806343217c5914612d4757806345583b7a14612d0e5780634a0772aa14612ce85780634be71c76146128065780634f08c7751461242f578063598a7f6914611fd6578063615f64fe14611f7557806366ff912c14611ee5578063670c3bdd14611ebf578063790450f614611e4a5780637f789aec14611e2057806383cb26fe14611dfb57806386bacdb814611d755780638de7f29f146119085780638f5173b6146113b957806391d14854146113525780639b998bfd14610fe2578063a217fddf14610fc6578063a761641914610f8a578063b208514b14610e28578063b95558d914610e0a578063c6781a4d14610ddd578063d547741f14610d7c578063d671449f1461094f578063dd39788b146106f0578063ecd00261146106b55763f85890da1461019f575f80fd5b346106b25760606003193601126106b2576101b8613a05565b60249167ffffffffffffffff9083358281116106ae576101dc903690600401613ac4565b916101e5613db2565b600194855f52602095600587526001600160a01b03958660405f205416156106845760075460ff8160a01c1661021a816139fb565b80610528575050815f52600588526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617885260781b161788526037600986f0878116156104fe5787905b1696873b156104fa57604051917f8dac9bbc0000000000000000000000000000000000000000000000000000000083521660048201526060838201528481806102e6606482018a613c2f565b60443560448301520381838b5af180156104ef579085916104d7575b5050857f2dfc3469dcf10b589544c2aac0192c99266145f6dc03b1f53dc770b01614df3888604051338152a26040519461033b86613a85565b85528685019481865260408101933385528786526002895260408620915180519182116104c45761036c8354613d6e565b601f811161048b575b508990601f831160011461042c576103a39291889183610421575b50505f198260011b9260031b1c19161790565b81555b01935192600a8410156104105750507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610407816145ee565b50604051908152f35b634e487b7160e01b81526021600452fd5b015190505f80610390565b8388528a88208593929091601f1984168a8e5b828210610474575050841161045c575b505050811b0181556103a6565b01515f1960f88460031b161c191690555f808061044f565b83850151865589979095019493840193018e61043f565b6104b4908489528b8920601f850160051c8101918d86106104ba575b601f0160051c0190613ef3565b5f610375565b90915081906104a7565b8487634e487b7160e01b81526041600452fd5b6104e090613a71565b6104eb57835f610302565b8380fd5b6040513d87823e3d90fd5b8580fd5b60046040517fc2f868f4000000000000000000000000000000000000000000000000000000008152fd5b610531816139fb565b8084036105dc575050815f52600688528660405f205416156105b257815f52600688528660405f205416604051906104ea90818301918383108884111761059f579183916060936147378439815260408c82015288604082015203019086f080156104ef578780911661029a565b8689634e487b7160e01b81526041600452fd5b60046040517f8d0c676b000000000000000000000000000000000000000000000000000000008152fd5b806105e86002926139fb565b0361065a57825f52600589528760405f20541660405191610dbb918284019284841089851117610647578492608094928d9261511186398352168c8201526060604082015288606082015203019086f080156104ef578780911661029a565b878a634e487b7160e01b81526041600452fd5b60046040517f80fd5114000000000000000000000000000000000000000000000000000000008152fd5b60046040517f2a3dfedf000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b80fd5b50346106b257806003193601126106b25760206040517ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c8152f35b50346106b2576020806003193601126106ae5761070b613a05565b90610714613e44565b825b60098110610722578380f35b600a81101561093b576001600160a01b03908161073e82613d0b565b541661074f575b6001915001610716565b8161075982613d0b565b54161561068457848261076b83613d22565b541661080a57508161077c82613d0b565b5416604051906104f0908183019183831067ffffffffffffffff8411176107f657918391604093614c21843981528588168782015203019086f080156104ef576001926107c883613d22565b91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610745565b602489634e487b7160e01b81526041600452fd5b90916004848261081986613d22565b5416604051928380927f5c60da1b0000000000000000000000000000000000000000000000000000000082525afa9081156109305783916108fa575b50818061086186613d0b565b5416911603610875575b5050600190610745565b8061087f84613d22565b54169061088b84613d0b565b5416813b156108f65782916024839260405194859384927f3659cfe600000000000000000000000000000000000000000000000000000000845260048401525af180156108eb571561086b576108e090613a71565b6104eb57835f61086b565b6040513d84823e3d90fd5b8280fd5b90508481813d8311610929575b6109118183613aa1565b810103126108f6575181811681036108f6575f610855565b503d610907565b6040513d85823e3d90fd5b602484634e487b7160e01b81526021600452fd5b50346106b25760e06003193601126106b257610969613a05565b90610972613a31565b61097a613a47565b92610983613a1b565b60843560ff8116809103610d785760a4359360ff85168095036104fa5767ffffffffffffffff9360c435858111610d74576109c2903690600401613ac4565b956109cb613db2565b6001600160a01b039384895416928315610d4a578516938415610d3a576040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481895afa8015610d2f578b90610cee575b60ff915016604d8111610cda579a8680928c9d600a9d9b9c9d0a5b604051987fb32cddf4000000000000000000000000000000000000000000000000000000008a5260048a0152602489015216604487015216606485015260848401528560a484015283600195600160c48601521660e48401528561010484015261012483015284610144830152816101648160209a8b945af1908115610ccf578491610c99575b50169360405190610ad682613a85565b815285810193600485526040820192338452868552600288526040852092518051928311610c8557610b088454613d6e565b601f8111610c57575b508891601f8411600114610bed57509180610b43926001959488926104215750505f198260011b9260031b1c19161790565b81555b01925191600a831015610bd957507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610ba6816145ee565b50807f94db49514f0cf5d266b56d1f8d565491766c8a518dd70f1ae36b66f3b72816e683604051338152a2604051908152f35b80634e487b7160e01b602492526021600452fd5b9190601f1984168588528a88209388905b8c838310610c3f57505050916001959492918387959310610c27575b505050811b018155610b46565b01515f1960f88460031b161c191690555f8080610c1a565b84860151875595810195948501949190910190610bfe565b610c7f908588528a8820601f860160051c8101918c87106104ba57601f0160051c0190613ef3565b5f610b11565b602486634e487b7160e01b81526041600452fd5b90508681813d8311610cc8575b610cb08183613aa1565b810103126104eb575181811681036104eb575f610ac6565b503d610ca6565b6040513d86823e3d90fd5b60248b634e487b7160e01b81526011600452fd5b506020813d602011610d27575b81610d0860209383613aa1565b81010312610d23575160ff81168103610d235760ff90610a24565b8a80fd5b3d9150610cfb565b6040513d8d823e3d90fd5b899a86809260019c9a9b9c610a3f565b60046040517fa681d23d000000000000000000000000000000000000000000000000000000008152fd5b8780fd5b8480fd5b50346106b25760406003193601126106b257610dd9600435610d9c613a31565b908084527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052610dd46001604086200154613eb2565b61417d565b5080f35b50346106b25760206003193601126106b257610e07610dfa613a05565b610e02613e44565b6144d4565b80f35b50346106b257806003193601126106b2576020600354604051908152f35b50346106b257602090816003193601126106b257610e44613a05565b918160408051610e5381613a85565b60608152828482015201526001600160a01b03809316825260028152604082209260405192610e8184613a85565b60405190808654610e9181613d6e565b80855291600191808316908115610f4b5750600114610f16575b5050509481610ec06001936060980382613aa1565b85520154610f0b610eff84860194610edb60ff851687613da6565b84604088019460081c16845260405197889782895251918801526080870190613c2f565b93516040860190613c54565b511660608301520390f35b92508783528583205b828410610f38575050508101830181610ec06001610eab565b8054858501880152928601928101610f1f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688870152505050151560051b82018401905081610ec06001610eab565b50346106b25760206003193601126106b25760043590600a8210156106b25760206001600160a01b03610fbc84613d0b565b5416604051908152f35b50346106b257806003193601126106b257602090604051908152f35b50346106b25760e06003193601126106b25760043567ffffffffffffffff8082116108f657366023830112156108f657602491600481013561102381613b2d565b916110316040519384613aa1565b8183526020916024602085019160051b83010191368311610d7457602401905b82821061133b5750505050611064613a31565b9261106d613a47565b90611076613a1b565b90608435936001600160a01b0390818616938487036113375760a435958387168703610d235760c435976003891015611333577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009a8b549760ff8960401c16159b89169889158061132c575b6001809b149081611322575b159081611319575b506112ef577fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000081166001178e558c6112ba575b5060ff8d5460401c16156112905786851615611266571561123c576111616111679261115b8661115b61116c98613f09565b50613fd7565b5061422e565b61447b565b885b600981106111e75789898961118b8a6111868b6144d4565b6143a7565b611193575080f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff81541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b80836111f4879385613d39565b5116611201575b0161116e565b9050600a81101561122957806112248461121c889486613d39565b511682614285565b6111fb565b838a634e487b7160e01b81526021600452fd5b60046040517f12cd6dbf000000000000000000000000000000000000000000000000000000008152fd5b60046040517f12c44af2000000000000000000000000000000000000000000000000000000008152fd5b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001178d555f611129565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6110f6565b303b1591506110ee565b508c6110e2565b8b80fd5b8980fd5b83809161134784613a5d565b815201910190611051565b50346106b25760406003193601126106b25760ff6040602092611373613a31565b60043582527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680085526001600160a01b038383209116825284522054166040519015158152f35b50346106b25760806003193601126106b2576113d3613a05565b60243567ffffffffffffffff81116108f6576113f3903690600401613ac4565b600160643510156108f657611406613db2565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a546001600160a01b0316156106845760075460ff8160a01c16611452816139fb565b8061177257505060025f527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a54608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d7300000017845260781b7fffffffffffffffffffffffffffffffffff000000000000000000000000000000166e5af43d82803e903d91602b57fd5bf3176020526037600984f06001600160a01b038116156104fe576001600160a01b0384915b1692833b156106ae576001600160a01b03604051917f90db6967000000000000000000000000000000000000000000000000000000008352166004820152608060248201528181806115526084820187613c2f565b604435604483015261156960648301606435613d61565b038183885af180156108eb5761175e575b5050817ff937fc89bf034e068f1e3a97131790de63f3dbdd4e919120271bd817e463e3c5604080516115ae81606435613d61565b336020820152a2604051906115c282613a85565b81526020810190600282526040810190338252838552600260205260408520905180519067ffffffffffffffff821161174a576115ff8354613d6e565b601f811161171a575b50602090601f83116001146116b457918061163a92600195948a926104215750505f198260011b9260031b1c19161790565b81555b01915190600a8210156116a057602094507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610407816145ee565b602485634e487b7160e01b81526021600452fd5b838852602088209190601f198416895b81811061170257509160019594929183879593106116ea575b505050811b01815561163d565b01515f1960f88460031b161c191690555f80806116dd565b929360206001819287860151815501950193016116c4565b6117449084895260208920601f850160051c810191602086106104ba57601f0160051c0190613ef3565b5f611608565b602487634e487b7160e01b81526041600452fd5b61176790613a71565b6108f657825f61157a565b61177b816139fb565b6001810361185557505060025f5260066020527f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29546001600160a01b0316156105b25760025f5260066020527f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace2954604051906104ea808301916001600160a01b03169067ffffffffffffffff83118484101761174a579280926060928895614737843981526040602082015284604082015203019082f08015611848576001600160a01b038091166114fd565b50604051903d90823e3d90fd5b806118616002926139fb565b0361065a5760025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a5460405191906001600160a01b031667ffffffffffffffff610dbb840190811190841117610c85578592916001600160a01b0391610dbb6151118539610dbb84019081529116602082015260606040820181905281018390528190036080019082f08015611848576001600160a01b038091166114fd565b50346106b25760806003193601126106b257611922613a05565b9061192b613a31565b90611934613a47565b9067ffffffffffffffff6064358181116108f657611956903690600401613ac4565b61195e613db2565b600693845f52602096600588526001600160a01b038060405f205416156106845760075460ff8160a01c16611992816139fb565b80611c6c575050865f52600589526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617895260781b161789526037600987f0818116156104fe5781905b1697883b15611c6857819081604051947f65e8e4f40000000000000000000000000000000000000000000000000000000086521660048501521692836024840152169081604482015260806064820152858180611a726084820188613c2f565b0381838c5af18015611c5d57889392918791611c42575b50507f3129d363a72612cdd778ba6d28cf0c298c9cbae5a5b3e819ebaabda5645e897b916060916040519182528a820152336040820152a260405190611ace82613a85565b81528581019384526040810191338352858452600287526040842091518051918211611c2e57611afe8354613d6e565b601f8111611c00575b508790601f8311600114611b9b579180611b38926001959488926104215750505f198260011b9260031b1c19161790565b81555b01925191600a831015610bd957507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610407816145ee565b8386528886209190601f198416875b8b828210611bea575050916001959492918387959310611bd2575b505050811b018155611b3b565b01515f1960f88460031b161c191690555f8080611bc5565b6001859682939686015181550195019301611baa565b611c2890848752898720601f850160051c8101918b86106104ba57601f0160051c0190613ef3565b5f611b07565b602485634e487b7160e01b81526041600452fd5b611c4f9192939450613a71565b610d7857908691855f611a89565b6040513d88823e3d90fd5b8680fd5b611c75816139fb565b60018103611cf6575050865f528689528060405f205416156105b257865f528689528060405f205416604051906104ea908183019183831089841117611ce2579183916060936147378439815260408d82015289604082015203019087f08015611c5d5781809116611a12565b60248a634e487b7160e01b81526041600452fd5b80611d026002926139fb565b0361065a57875f5260058a528160405f20541660405191610dbb91828401928484108a851117611d6157849260809492879261511186398352168d8201526060604082015289606082015203019087f08015611c5d5781809116611a12565b60248b634e487b7160e01b81526041600452fd5b50346106b257806003193601126106b257604051600380548083529083526020808301937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b92915b828210611de457611de085611dd481890382613aa1565b60405191829182613beb565b0390f35b835486529485019460019384019390910190611dbd565b50346106b25760206003193601126106b257610e07611e18613a05565b611167613e44565b50346106b25760206003193601126106b25760043560038110156106ae57610e0790611186613e44565b50346106b257806003193601126106b257611e63613cdd565b815b60098110611e7b5760405180611de08482613beb565b600a811015611eab57806001600160a01b03611e98600193613d22565b5416611ea48285613d39565b5201611e65565b602483634e487b7160e01b81526021600452fd5b50346106b257806003193601126106b2576001600160a01b036020915416604051908152f35b50346106b25760206003193601126106b257610dd96001600160a01b03611f0a613a05565b611f12613e44565b1680835260026020528260016040822082611f2d8254613d6e565b80611f3c575b50500155614657565b601f81118414611f51575081555b825f611f33565b828252611f6c601f60208420920160051c8201858301613ef3565b81835555611f4a565b50346106b257806003193601126106b257611f8e613cdd565b815b60098110611fa65760405180611de08482613beb565b600a811015611eab57806001600160a01b03611fc3600193613d0b565b5416611fcf8285613d39565b5201611f90565b50346106b25760606003193601126106b257611ff0613a05565b60249167ffffffffffffffff9083358281116106ae57612014903690600401613ac4565b9361201d613b1a565b90612026613db2565b600890815f52602096600588526001600160a01b038060405f205416156106845760075460ff8160a01c1661205a816139fb565b80612326575050835f52600589526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617895260781b161789526037600987f0818116156104fe5781905b16976001958260015416908a3b15612322579088929160405194859384937f8135f432000000000000000000000000000000000000000000000000000000008552600485015216878301526080604483015263ffffffff61213e6084840188613c2f565b911660648301520381838c5af18015611c5d5790869161230e575b5050867fda6125abc973828e1862a29f88ca1ec9659d3c6a6dd2cae10a38bb2a4018c5f189604051338152a26040519061219282613a85565b815287810195838752604082019433865288875260028a5260408720925180519283116122fb576121c38454613d6e565b8b601f82116122cd575b50508a91601f84116001146122645750918061220092600195948a926104215750505f198260011b9260031b1c19161790565b81555b01945193600a85101561041057505060ff74ffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffff0000000000000000000000000000000000000000009286549451901b169316911617179055610407816145ee565b9190601f198416858a528c808b20948b915b8383106122b65750505091600195949291838795931061229e575b505050811b018155612203565b01515f1960f88460031b161c191690555f8080612291565b848601518755958101959485019491820191612276565b858a52808a206122f492601f870160051c82019287106104ba57601f0160051c0190613ef3565b5f8b6121cd565b8488634e487b7160e01b81526041600452fd5b61231790613a71565b610d7857845f612159565b8880fd5b61232f816139fb565b600181036123b1575050835f52600689528060405f205416156105b257835f52600689528060405f205416604051906104ea90818301918383108b84111761239e579183916060936147378439815260408d82015289604082015203019087f08015611c5d57818091166120da565b868a634e487b7160e01b81526041600452fd5b806123bd6002926139fb565b0361065a57845f5260058a528160405f20541660405191610dbb91828401928484108c85111761241c57849260809492879261511186398352168d8201526060604082015289606082015203019087f08015611c5d57818091166120da565b878b634e487b7160e01b81526041600452fd5b50346106b25760806003193601126106b257612449613a05565b602480359267ffffffffffffffff938481116106ae5761246d903690600401613ac4565b612475613b1a565b9261247e613db2565b600591825f526020968388526001600160a01b038060405f205416156106845760075460ff8160a01c166124b1816139fb565b80612711575050845f528489526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617895260781b161789526037600987f0818116156104fe5781905b16976001978260015416908a3b15612322579088929160405194859384937f3d1669c20000000000000000000000000000000000000000000000000000000085526004850152168883015260a0604483015263ffffffff61259460a4840189613c2f565b9116606483015260643560848301520381838c5af18015611c5d579086916126fd575b5050867fa98010796c2dcaa64748d882372c2cc9859289461627958a5b6314bab3655eb089604051338152a2604051916125f083613a85565b825287820195848752604083019433865288875260028a526040872093519081519384116126ea578a6126238654613d6e565b601f81116126b1575b5050508991601f8411600114612660575091806103a3926001959489926104215750505f198260011b9260031b1c19161790565b9190601f1984168589528b89209389905b8d8383106126995750505091600195949291838795931061045c57505050811b0181556103a6565b84860151875595810195948501949190910190612671565b6126d892878b52828b2091601f8801821c83019388106126e0575b601f01901c0190613ef3565b5f8a8161262c565b91925082916126cc565b8588634e487b7160e01b81526041600452fd5b61270690613a71565b610d7857845f6125b7565b61271a816139fb565b60018103612789575050845f52600689528060405f205416156105b257845f52600689528060405f205416604051906104ea908183019183831086841117610647579183916060936147378439815260408d82015289604082015203019087f08015611c5d5781809116612530565b806127956002926139fb565b0361065a57855f52858a528160405f20541660405191610dbb9182840192848410878511176127f357849260809492879261511186398352168d8201526060604082015289606082015203019087f08015611c5d5781809116612530565b888b634e487b7160e01b81526041600452fd5b5034612b5f57600319608081360112612b5f5760043567ffffffffffffffff8111612b5f57612839903690600401613b45565b9060243567ffffffffffffffff8111612b5f5761285a903690600401613b45565b6044359160ff83168303612b5f5760643567ffffffffffffffff8111612b5f57612888903690600401613ac4565b92612891613db2565b60035f5260056020527fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc0546001600160a01b0316156106845760075460ff8160a01c166128dd816139fb565b80612b635750507fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc054608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d73000000175f90815260789190911b7fffffffffffffffffffffffffffffffffff000000000000000000000000000000166e5af43d82803e903d91602b57fd5bf317602052603790600990f06001600160a01b038116156104fe576001600160a01b03905b1694853b15612b5f57612a026129dc925f9460ff6129ec60405198899788977fd43744b0000000000000000000000000000000000000000000000000000000008952608060048a01526084890190613c9d565b9084888303016024890152613c9d565b9216604485015283820301606484015286613c2f565b038183875af18015612b5457612b41575b50817f25cb6ab4d676eacf0a1b262c7d414e841460d951d330b13c1ff14cc2350bb4866020604051338152a260405190612a4c82613a85565b81526020810190600382526040810190338252838552600260205260408520905180519067ffffffffffffffff821161174a57612a898354613d6e565b601f8111612b11575b50602090601f8311600114612ac457918061163a92600195948a926104215750505f198260011b9260031b1c19161790565b838852602088209190601f198416895b818110612af957509160019594929183879593106116ea57505050811b01815561163d565b92936020600181928786015181550195019301612ad4565b612b3b9084895260208920601f850160051c810191602086106104ba57601f0160051c0190613ef3565b5f612a92565b612b4c919350613a71565b5f915f612a13565b6040513d5f823e3d90fd5b5f80fd5b612b6c816139fb565b60018103612c4857505060035f5260066020527f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d2546001600160a01b0316156105b25760035f5260066020527f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d254604051906001600160a01b03166104ea80830167ffffffffffffffff811184821017612c3457606092849261473784398152604060208201525f60408201520301905ff08015612b54576001600160a01b03809116612989565b634e487b7160e01b5f52604160045260245ffd5b80612c546002926139fb565b0361065a5760035f5260056020526001600160a01b0360405f2054166040519182610dbb81011067ffffffffffffffff610dbb85011117612c34576001600160a01b0391610dbb6151118539610dbb840152166020610dbb8301015260606040610dbb830101525f6060610dbb83010152608081610dbb81010301905ff08015612b54576001600160a01b03809116612989565b34612b5f575f600319360112612b5f5760206001600160a01b0360015416604051908152f35b34612b5f576040600319360112612b5f57600435600a811015612b5f57612d4590612d37613a31565b90612d40613e44565b614285565b005b34612b5f576020600319360112612b5f57612d45612d63613a05565b612d6b613e44565b61422e565b34612b5f57600319360160a08112612b5f57606013612b5f57604051612d9581613a85565b6004356003811015612b5f578152602435906001600160a01b038083168303612b5f57602092838301526044358181168103612b5f5760408301526064359160ff8316809303612b5f5767ffffffffffffffff90608435828111612b5f57612e01903690600401613ac4565b90612e0a613db2565b600793845f52600587528060405f2054161561068457845460ff8160a01c16612e32816139fb565b806130e0575050845f52600587526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b16178752603760095ff0818116156104fe575b1694853b15612b5f57612eed604051927f62ab4aff0000000000000000000000000000000000000000000000000000000084526004840190613c6e565b606482015260a060848201525f8180612f0960a4820186613c2f565b038183895af18015612b54576130d1575b50837f37be858b2ccacf33d24a1d68aa02b4a63c2815dfb0135a1854f066271b81447a86604051338152a260405190612f5282613a85565b81528481019283526040810191338352845f526002865260405f2091518051918211612c3457612f828354613d6e565b601f81116130a3575b508690601f831160011461303d579180612fbc92600195945f926130325750505f198260011b9260031b1c19161790565b81555b01915190600a82101561301e577fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610407816145ee565b634e487b7160e01b5f52602160045260245ffd5b015190508980610390565b90601f19831691845f52885f20925f5b8a82821061308d575050916001959492918387959310613075575b505050811b018155612fbf565b01515f1960f88460031b161c19169055888080613068565b600185968293968601518155019501930161304d565b6130cb90845f52885f20601f850160051c8101918a86106104ba57601f0160051c0190613ef3565b87612f8b565b6130da90613a71565b85612f1a565b6130e9816139fb565b60018103613153575050845f52600687528060405f205416156105b257845f52600687528060405f205416604051906104ea80830183811088821117612c345760609284926147378439815260408b8201525f60408201520301905ff08015612b54578116612eb0565b8061315f6002926139fb565b0361065a57855f52600588528160405f2054169060405191610dbb8084019084821089831117612c34576080938593879261511186398352168b820152606060408201525f60608201520301905ff08015612b54578116612eb0565b34612b5f576040600319360112612b5f576131d4613a31565b336001600160a01b038216036131f057612d459060043561417d565b60046040517f6697b232000000000000000000000000000000000000000000000000000000008152fd5b34612b5f576040600319360112612b5f57612d45600435613239613a31565b90805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052613271600160405f200154613eb2565b6140c8565b34612b5f576020600319360112612b5f576004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526020600160405f200154604051908152f35b34612b5f576080600319360112612b5f576132db613a05565b67ffffffffffffffff602435818111612b5f576132fc903690600401613ac4565b60443590600a821015612b5f57613311613a1b565b9261331a613e44565b6040519161332783613a85565b82526020936133398584019485613da6565b60408301956001600160a01b0380921687521693845f526002815260405f2092518051928311612c345761336d8454613d6e565b601f811161347b575b5081601f8411600114613413575091806133a792600195945f926134085750505f198260011b9260031b1c19161790565b81555b019051600a81101561301e57612d45937fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b1693169116171790556145ee565b015190508880610390565b9190601f198416855f52835f20935f905b82821061346357505091600195949291838795931061344b575b505050811b0181556133aa565b01515f1960f88460031b161c1916905587808061343e565b80600186978294978701518155019601940190613424565b6134a390855f52835f20601f860160051c8101918587106104ba57601f0160051c0190613ef3565b87613376565b34612b5f576080600319360112612b5f576134c2613a05565b60249067ffffffffffffffff8235818111612b5f576134e5903690600401613ac4565b926134ee613b1a565b92606435946002861015612b5f57613504613db2565b5f8052602095600587526001600160a01b038060405f205416156106845760075460ff8160a01c16613535816139fb565b806138285750505f8052600588526e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff00000000000000000000000000000060405f2054763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b16178852603760095ff0818116156104fe5781905b16966001948260015416893b15612b5f575f9260405194859384937f05ca7e2a0000000000000000000000000000000000000000000000000000000085526004850152168983015260a0604483015263ffffffff61361660a4840189613c2f565b9116606483015261362a6084830187613c61565b0381838b5af18015612b545787927f15ce7d3879fe7d7f8f648de3b1db0e4161a6379299190e2786c831014ec1a96892604092613819575b5061366f82518092613c61565b338a820152a26040519061368282613a85565b8152858101935f85526040820192338452865f526002885260405f2092518051928311613806576136b38454613d6e565b601f81116137d8575b508891601f841160011461376e575091806136ee92600195945f926137635750505f198260011b9260031b1c19161790565b81555b01925191600a83101561375157507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610407816145ee565b634e487b7160e01b5f5260216004525ffd5b015190508a80610390565b9190601f198416855f528a5f20935f905b8c8383106137c0575050509160019594929183879593106137a8575b505050811b0181556136f1565b01515f1960f88460031b161c1916905589808061379b565b8486015187559581019594850194919091019061377f565b61380090855f528a5f20601f860160051c8101918c87106104ba57601f0160051c0190613ef3565b896136bc565b85634e487b7160e01b5f5260416004525ffd5b61382290613a71565b8a613662565b613831816139fb565b600181036138b35750505f8052600688528060405f205416156105b2575f8052600688528060405f205416604051906104ea90818301918383108a8411176138a0579183916060936147378439815260408c8201525f60408201520301905ff08015612b5457818091166135b5565b88634e487b7160e01b5f5260416004525ffd5b806138bf6002926139fb565b0361065a575f8052600589528160405f20541660405191610dbb91828401928484108b85111761391e57849260809492879261511186398352168c820152606060408201525f60608201520301905ff08015612b5457818091166135b5565b89634e487b7160e01b5f5260416004525ffd5b34612b5f575f600319360112612b5f57602060ff60075460a01c1660405190613959816139fb565b8152f35b34612b5f576020600319360112612b5f57600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203612b5f57817f7965db0b00000000000000000000000000000000000000000000000000000000602093149081156139d1575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836139ca565b6003111561301e57565b600435906001600160a01b0382168203612b5f57565b606435906001600160a01b0382168203612b5f57565b602435906001600160a01b0382168203612b5f57565b604435906001600160a01b0382168203612b5f57565b35906001600160a01b0382168203612b5f57565b67ffffffffffffffff8111612c3457604052565b6060810190811067ffffffffffffffff821117612c3457604052565b90601f601f19910116810190811067ffffffffffffffff821117612c3457604052565b81601f82011215612b5f5780359067ffffffffffffffff8211612c345760405192613af96020601f19601f8601160185613aa1565b82845260208383010111612b5f57815f926020809301838601378301015290565b6044359063ffffffff82168203612b5f57565b67ffffffffffffffff8111612c345760051b60200190565b81601f82011215612b5f578035906020613b5e83613b2d565b936040613b6e6040519687613aa1565b8486528286019183606080970286010194818611612b5f578401925b858410613b9b575050505050505090565b8684830312612b5f57825190613bb082613a85565b8435906003821015612b5f578287928a9452613bcd838801613a5d565b83820152613bdc868801613a5d565b86820152815201930192613b8a565b60209060206040818301928281528551809452019301915f5b828110613c12575050505090565b83516001600160a01b031685529381019392810192600101613c04565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90600a82101561301e5752565b90600282101561301e5752565b6040908051613c7c816139fb565b8352816020820151916001600160a01b038093166020860152015116910152565b9081518082526020808093019301915f5b828110613cbc575050505090565b9091929382606082613cd16001948951613c6e565b01950193929101613cae565b60405190610140820182811067ffffffffffffffff821117612c345760405260098252610120366020840137565b600a81101561301e575f52600560205260405f2090565b600a81101561301e575f52600660205260405f2090565b8051821015613d4d5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90600182101561301e5752565b90600182811c92168015613d9c575b6020831014613d8857565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613d7d565b600a82101561301e5752565b335f9081527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020547ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c9060ff1615613e0d5750565b604490604051907fe2517d3f0000000000000000000000000000000000000000000000000000000082523360048301526024820152fd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615613e7c57565b60446040517fe2517d3f0000000000000000000000000000000000000000000000000000000081523360048201525f6024820152fd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f20335f5260205260ff60405f20541615613e0d5750565b818110613efe575050565b5f8155600101613ef3565b6001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020547f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff16613fd1575f805260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533905f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50505f90565b6001600160a01b03165f8181527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020547ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c91907f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff166140c157825f5260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b5050505f90565b90815f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800806020526001600160a01b0360405f20921691825f5260205260ff60405f205416155f146140c157825f5260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b90815f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800806020526001600160a01b0360405f20921691825f5260205260ff60405f2054165f146140c157825f5260205260405f20815f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6001600160a01b0316807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f617370f36178428dc875efb4aa5e95dbb46606559302417e0b4475ba443b7e055f80a2565b906001600160a01b03809116908115610684576142a183613d0b565b827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055806142d384613d22565b5416614314575b507f830d51bd3db318a35214cbb8d86fe13af846e7c23eeb283c257361d480dca3b89160409161430c83518093613c54565b6020820152a1565b61431d83613d22565b541691823b15612b5f575f80936024604051809681937f3659cfe60000000000000000000000000000000000000000000000000000000083528760048401525af1918215612b54577f830d51bd3db318a35214cbb8d86fe13af846e7c23eeb283c257361d480dca3b893604093614398575b509150916142da565b6143a190613a71565b5f61438f565b6143b0816139fb565b600181148061446c575b614442576020816143eb7fd1d4d100df0b44309929f432020253358549e7a1fa9195b6358f72a60fc73228936139fb565b6007547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000008360a01b169116176007556040519061443d816139fb565b8152a1565b60046040517f25ef8c46000000000000000000000000000000000000000000000000000000008152fd5b5061447561455d565b156143ba565b6001600160a01b0316807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f068219f19fc412d19bac599fa894ef21d81187fc5fb5295836dbe550a0fa782d5f80a2565b6001600160a01b0316801561453357807fffffffffffffffffffffffff000000000000000000000000000000000000000060075416176007557fe4f20b8ff02c86c40a29871dba01cb6f8813f970b7143cc2d70e11f6e64afec35f80a2565b60046040517f5c58618c000000000000000000000000000000000000000000000000000000008152fd5b5f5b6009811061456d5750600190565b600a81101561301e576001600160a01b038061458883613d0b565b5416151590816145a5575b506145a05760010161455f565b505f90565b90506145b082613d22565b5416155f614593565b600354811015613d4d5760035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01905f90565b805f52600460205260405f2054155f146145a05760035468010000000000000000811015612c345761464061462a8260018594016003556145b9565b81939154905f199060031b92831b921b19161790565b9055600354905f52600460205260405f2055600190565b805f526004908160205260405f20548015155f146140c1575f19908181018181116147235760035490838201918211614710578181036146dd575b50505060035480156146ca578101906146aa826145b9565b909182549160031b1b191690556003555f526020525f6040812055600190565b603184634e487b7160e01b5f525260245ffd5b6146fb6146ec61462a936145b9565b90549060031b1c9283926145b9565b90555f528360205260405f20555f8080614692565b601186634e487b7160e01b5f525260245ffd5b601185634e487b7160e01b5f525260245ffdfe60a06040908082526104ea8038038091610019828561028f565b8339810182828203126101e05761002f826102c6565b60208084015191939091906001600160401b0382116101e057019180601f840112156101e0578251610060816102da565b9361006d8751958661028f565b818552838501928483830101116101e057815f9285809301855e85010152833b1561026f577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038681169182179092558651635c60da1b60e01b8082529193928582600481885afa918215610265575f9261022e575b50813b156102155750508651837f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a28551156101f557508390600488518095819382525afa9182156101eb575f926101a7575b505f8091610184955190845af4903d1561019e573d610169816102da565b906101768851928361028f565b81525f81943d92013e6102f5565b505b60805251610191908161035982396080518160450152f35b606092506102f5565b9391508284813d83116101e4575b6101bf818361028f565b810103126101e0575f80916101d6610184966102c6565b939550915061014b565b5f80fd5b503d6101b5565b86513d5f823e3d90fd5b945050505050346102065750610186565b63b398979f60e01b8152600490fd5b8851634c9c8ce360e01b81529116600482015260249150fd5b9091508581813d831161025e575b610246818361028f565b810103126101e057610257906102c6565b905f6100f6565b503d61023c565b89513d5f823e3d90fd5b8451631933b43b60e21b81526001600160a01b0385166004820152602490fd5b601f909101601f19168101906001600160401b038211908210176102b257604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101e057565b6001600160401b0381116102b257601f01601f191660200190565b9061031c575080511561030a57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061034f575b61032d575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561032556fe6080806040527f5c60da1b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561010b575f9161007b575b50610167565b905060203d602011610104575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f82011682019180831067ffffffffffffffff8411176100d7576100d19260405201610116565b5f610075565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610088565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060209101126101635760805173ffffffffffffffffffffffffffffffffffffffff811681036101635790565b5f80fd5b5f8091368280378136915af43d5f803e15610180573d5ff35b3d5ffdfea164736f6c6343000819000a60803461011857601f6104f038819003918201601f19168301916001600160401b0383118484101761011c57808492604094855283398101031261011857602061004882610130565b916001600160a01b0391829161005e9101610130565b16918215610100575f5460018060a01b03199380858316175f558360405192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3813b156100e957501680916001541617600155604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103ab90816101458239f35b63211eb15960e21b81529082166004820152602490fd5b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101185756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461026e5780635c60da1b1461021d578063715018a6146101835780638da5cb5b146101335763f2fde38b14610050575f80fd5b3461012f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012f5760043573ffffffffffffffffffffffffffffffffffffffff80821680920361012f576100a961034e565b81156100ff575f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60246040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152fd5b5f80fd5b3461012f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461012f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012f576101b961034e565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461012f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361012f576102c761034e565b3b1561031d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b602490604051907f847ac5640000000000000000000000000000000000000000000000000000000082526004820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361036e57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fdfea164736f6c6343000819000a604060a08152610dbb8038038061001581610262565b92833981019060608183031261025e5761002e81610287565b9160209161003d838201610287565b8582015190916001600160401b03919082821161025e57019280601f8501121561025e57835161007461006f8261029b565b610262565b948186528686019287838301011161025e57815f9288809301855e86010152853b1561023e577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b038881166001600160a01b0319928316811790935589519098919691927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281511561022057505f61013b9381925190845af43d15610218573d9161012d61006f8461029b565b9283523d5f8985013e6102b6565b505b85519161063b918284019081118482101761020457868492879461078085391681520301905ff080156101fa57831691826080527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f857fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103958587549483519286168352820152a182156101e3571617905551610466908161031a823960805181601c0152f35b8451633173bdd160e11b81525f6004820152602490fd5b84513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102b6565b925050503461022f575061013d565b63b398979f60e01b8152600490fd5b8651634c9c8ce360e01b81526001600160a01b0387166004820152602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020457604052565b51906001600160a01b038216820361025e57565b6001600160401b03811161020457601f01601f191660200190565b906102dd57508051156102cb57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580610310575b6102ee575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156102e656fe608060405273ffffffffffffffffffffffffffffffffffffffff337f00000000000000000000000000000000000000000000000000000000000000008216036100c0575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100b65760046040517fd2b576ec000000000000000000000000000000000000000000000000000000008152fd5b6100be6101b0565b005b5f80917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156100fc573d5ff35b3d5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761017157604052565b610100565b67ffffffffffffffff811161017157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b366004116102635760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043573ffffffffffffffffffffffffffffffffffffffff8116809103610263576024359067ffffffffffffffff821161026357366023830112156102635781600401359061023861023383610176565b61012d565b918083523660248286010111610263576020815f92602461026197018387013784010152610267565b565b5f80fd5b90813b156103395773ffffffffffffffffffffffffffffffffffffffff82167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156103065761030391610380565b50565b50503461030f57565b60046040517fb398979f000000000000000000000000000000000000000000000000000000008152fd5b60248273ffffffffffffffffffffffffffffffffffffffff604051917f4c9c8ce3000000000000000000000000000000000000000000000000000000008352166004820152fd5b5f806103b293602081519101845af43d156103b5573d916103a361023384610176565b9283523d5f602085013e6103b9565b90565b6060915b906103f857508051156103ce57805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580610450575b610409575090565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b1561040156fea164736f6c6343000819000a60803460b457601f61063b38819003918201601f19168301916001600160401b0383118484101760b85780849260209460405283398101031260b457516001600160a01b03908181169081900360b4578015609c575f80546001600160a01b03198116831782556040519316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361056e90816100cd8239f35b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f915f3560e01c8063715018a6146104345780638da5cb5b146103e35780639623609d146101fe578063ad3cb1cc1461013e5763f2fde38b14610054575f80fd5b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5781359173ffffffffffffffffffffffffffffffffffffffff91828416809403610136576100ae610511565b83156101075750505f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b5f80fd5b8280fd5b5082346101fb57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fb575080519080820182811067ffffffffffffffff8211176101cf576101cb93508152600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182916020835260208301906104ce565b0390f35b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b80fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101365781359173ffffffffffffffffffffffffffffffffffffffff908184168094036101365760249182359081168091036101365767ffffffffffffffff90604435828111610136573660238201121561013657808401358381116103b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe091875192603f81601f850116011683018381108682111761038d5788528183523687838301011161013657815f92886020930183860137830101526102e9610511565b863b1561013657610334965f9287518099819482937f4f1ef286000000000000000000000000000000000000000000000000000000008452898401528a8a84015260448301906104ce565b039134905af1801561038357610348578580f35b909192938095501161035957505052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b84513d5f823e3d90fd5b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b856041867f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b5034610136575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101365760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b34610136575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101365761046a610511565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361053157565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fdfea164736f6c6343000819000aa164736f6c6343000819000a