20 txs
21 calls
constructor
constructor(address ownerAddr)
functions
deploymentRecords
viewfunction deploymentRecords(uint256) view returns (address tokenProxy, address tokenProxyAdmin, address tokenImplAddress, address vaultProxy, address vaultProxyAdmin, address vaultImplAddress, address assetsWhitelistAddress, address sendersWhitelistAddress, address scheduledCallerAddress)
lzEndpointAddress
viewfunction lzEndpointAddress() view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
tokenImplementationAddress
viewfunction tokenImplementationAddress() view returns (address)
vaultImplementationAddress
viewfunction vaultImplementationAddress() view returns (address)
whitelistedDeployers
viewfunction whitelistedDeployers(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
deploy
nonpayablefunction deploy(uint256 deploymentId)
grantDeployer
nonpayablefunction grantDeployer(address addr)
revokeDeployer
nonpayablefunction revokeDeployer(address addr)
setEndpoint
nonpayablefunction setEndpoint(address lzEndpointAddr)
setTokenImplementation
nonpayablefunction setTokenImplementation(address addr)
setVaultImplementation
nonpayablefunction setVaultImplementation(address addr)
submitSpec
nonpayablefunction submitSpec(tuple spec) returns (uint256)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
DeploymentCompleted
event DeploymentCompleted(uint256 deploymentId)
DeploymentRequestAccepted
event DeploymentRequestAccepted(uint256 deploymentId)
LpTokenDeployed
event LpTokenDeployed(address proxyAddr, address proxyAdminAddr, address implAddr)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
VaultDeployed
event VaultDeployed(address proxyAddr, address proxyAdminAddr, address implAddr)
errors
AddressAlreadyTaken
error AddressAlreadyTaken()
DeployerAlreadyWhitelisted
error DeployerAlreadyWhitelisted()
DeployerNotWhitelisted
error DeployerNotWhitelisted()
DeploymentAlreadyExecuted
error DeploymentAlreadyExecuted()
DeploymentSpecRequired
error DeploymentSpecRequired()
InvalidAddress
error InvalidAddress()
InvalidErc20
error InvalidErc20()
InvalidTokenDecimals
error InvalidTokenDecimals()
LayerZeroEndpointAlreadySet
error LayerZeroEndpointAlreadySet()
LayerZeroEndpointNotAvailable
error LayerZeroEndpointNotAvailable()
OwnerAddressRequired
error OwnerAddressRequired()
OwnerOnly
error OwnerOnly()
ProxyAdminDeploymentFailed
error ProxyAdminDeploymentFailed()
ProxyDeploymentFailed
error ProxyDeploymentFailed()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TokenImplementationNotSet
error TokenImplementationNotSet()
Unauthorized
error Unauthorized()
VaultImplementationNotSet
error VaultImplementationNotSet()
ZeroAddressError
error ZeroAddressError()
creation bytecode
0x6080604052348015600e575f80fd5b50604051615e75380380615e75833981016040819052602b91608d565b6001600160a01b038116605157604051633efa09af60e01b815260040160405180910390fd5b600180546001600160a01b039092166001600160a01b0319909216821781555f91825260076020526040909120805460ff1916909117905560b8565b5f60208284031215609c575f80fd5b81516001600160a01b038116811460b1575f80fd5b9392505050565b615db0806100c55f395ff3fe608060405234801561000f575f80fd5b50600436106100dd575f3560e01c80638b1d7b27116100845780638b1d7b27146101b35780638da5cb5b146101c6578063a4e6a7b4146101d7578063a5e38751146102a5578063d83722f0146102b8578063dbbb4155146102cb578063e30c3978146102de578063f2fde38b146102ef575f80fd5b80631f338cbf146100e15780632e4934dd1461010a5780632fa435f31461011f57806353e78b6b14610140578063730791f814610153578063768071111461018557806379ba50971461019857806388282e2a146101a0575b5f80fd5b6005546100f4906001600160a01b031681565b60405161010191906121a5565b60405180910390f35b61011d6101183660046121b9565b610302565b005b61013261012d3660046121e6565b6103af565b604051908152602001610101565b61011d61014e3660046121b9565b610999565b6101756101613660046121b9565b60076020525f908152604090205460ff1681565b6040519015158152602001610101565b6004546100f4906001600160a01b031681565b61011d610a37565b61011d6101ae3660046121b9565b610a96565b6006546100f4906001600160a01b031681565b6001546001600160a01b03166100f4565b61024b6101e536600461221d565b600860208190525f91825260409091208054600182015460028301546003840154600485015460058601546006870154600788015497909801546001600160a01b0396871698958716979487169693841695928416949184169392831692918216911689565b604080516001600160a01b039a8b168152988a1660208a01529689169688019690965293871660608701529186166080860152851660a0850152841660c0840152831660e083015290911661010082015261012001610101565b61011d6102b336600461221d565b610b34565b61011d6102c63660046121b9565b61146d565b61011d6102d93660046121b9565b611546565b6002546001600160a01b03166100f4565b61011d6102fd3660046121b9565b61160e565b60025f540361032457604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461035357604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381165f9081526007602052604090205460ff1661038b576040516305dab3df60e21b815260040160405180910390fd5b6001600160a01b03165f908152600760205260408120805460ff1916905560019055565b5f60025f54036103d257604051633ee5aeb560e01b815260040160405180910390fd5b60025f9081553381526007602052604090205460ff16610405576040516305dab3df60e21b815260040160405180910390fd5b6004546001600160a01b031661042e576040516311f68ef960e21b815260040160405180910390fd5b6005546001600160a01b03166104575760405163daa2f31f60e01b815260040160405180910390fd5b6006546001600160a01b031661048057604051632a38eca960e01b815260040160405180910390fd5b60066104926060840160408501612242565b60ff1610806104b3575060126104ae6060840160408501612242565b60ff16115b156104d15760405163686d360760e01b815260040160405180910390fd5b5f805f806104de8661166f565b93509350935093505f60035f81546104f59061225d565b919050819055905060405180610300016040528083815260200184815260200185815260200186815260200188806101e001906105329190612281565b8252506020016105466102008a018a612281565b905081526020018861022001358152602001886102400135815260200188610260013581526020018861028001358152602001886102a001358152602001886102c001358152602001886102e00135815260200188610300013581526020018861032001358152602001308960400160208101906105c49190612242565b6105d160608c018c6122cd565b6105de60808e018e6122cd565b6040516024016105f396959493929190612337565b60408051601f19818403018152918152602080830180516001600160e01b03166285fc1360e71b179052918352519101906106329030906024016121a5565b60408051601f19818403018152919052602080820180516001600160e01b031663189acdbd60e31b179052908252016106736101608a016101408b016121b9565b6001600160a01b031681526020016106936101808a016101608b016121b9565b6001600160a01b031681526020016106b36101a08a016101808b016121b9565b6001600160a01b031681526020016106d36101c08a016101a08b016121b9565b6001600160a01b031681526020016106f36101e08a016101c08b016121b9565b6001600160a01b03168152602090810190610710908a018a6121b9565b6001600160a01b031681526020018860200160208101906107319190612384565b151590525f8281526009602081815260409283902084518155908401516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e08301516007830155610100830151600883015561012083015190820155610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201906107ef908261243a565b506102008201516010820190610805908261243a565b506102208201516011820180546001600160a01b03199081166001600160a01b03938416179091556102408401516012840180548316918416919091179055610260840151601384018054831691841691909117905561028084015160148401805483169184169190911790556102a08401516015840180549092169083161790556102c0830151601690920180546102e090940151929091166001600160a81b031990931692909217600160a01b911515919091021790556108c881886117ff565b6040518181527fc847abf55529a155d6d2f882c916fba247bea5ebd30a638bd2cd5699b5c177d99060200160405180910390a1600661090a60208901896121b9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610945573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096991906124f4565b60ff16101561098b5760405163668dd6cd60e11b815260040160405180910390fd5b60015f559695505050505050565b60025f54036109bb57604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146109ea57604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b038116610a1157604051633efa09af60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b039290921691909117905560015f55565b60025f5403610a5957604051633ee5aeb560e01b815260040160405180910390fd5b60025f819055546001600160a01b03163314610a87576040516282b42960e81b815260040160405180910390fd5b610a90336119a5565b60015f55565b60025f5403610ab857604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b03163314610ae757604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b038116610b0e57604051633efa09af60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b039290921691909117905560015f55565b60025f5403610b5657604051633ee5aeb560e01b815260040160405180910390fd5b60025f9081553381526007602052604090205460ff16610b89576040516305dab3df60e21b815260040160405180910390fd5b5f818152600960205260409020601301546001600160a01b0316610bc0576040516310708d7360e01b815260040160405180910390fd5b5f818152600860205260409020600301546001600160a01b031615610bf857604051633fd1a6b560e01b815260040160405180910390fd5b5f80610c03836119c1565b915091505f80610c1285611ada565b915091505f8162015180604051610c2890612157565b6001600160a01b0390921682526020820152604001604051809103905ff080158015610c56573d5f803e3d5ffd5b505f87815260096020526040808220601601549051929350909130916001600160a01b031690610c8590612164565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015610cb5573d5f803e3d5ffd5b505f8881526009602052604081206016015491925090600160a01b900460ff1615610d2b575f88815260096020526040908190206013015490516001600160a01b0390911690610d0490612171565b610d0e91906121a5565b604051809103905ff080158015610d27573d5f803e3d5ffd5b5090505b604051806101200160405280876001600160a01b03168152602001886001600160a01b0316815260200160055f9054906101000a90046001600160a01b03166001600160a01b03168152602001856001600160a01b03168152602001866001600160a01b0316815260200160065f9054906101000a90046001600160a01b03166001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b03168152602001846001600160a01b031681525060085f8a81526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506060820151816003015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c0820151816006015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e0820151816007015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610100820151816008015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050505f60016001600160401b03811115610f9d57610f9d6123a3565b604051908082528060200260200182016040528015610fc6578160200160208202803683370190505b506040805160018082528183019092529192505f91906020808301908036833701905050905085825f81518110610fff57610fff61250f565b60200260200101906001600160a01b031690816001600160a01b03168152505085815f815181106110325761103261250f565b6001600160a01b0392831660209182029290920101526040516311ffb1d360e11b8152908916906323ff63a69061106f9085908590600401612566565b5f604051808303815f87803b158015611086575f80fd5b505af1158015611098573d5f803e3d5ffd5b505050505f60405180610200016040528060095f8e81526020019081526020015f2060060154815260200160095f8e81526020019081526020015f2060070154815260200160095f8e81526020019081526020015f2060080154815260200160095f8e81526020019081526020015f2060090154815260200160095f8e81526020019081526020015f20600a0154815260200160095f8e81526020019081526020015f20600b0154815260200160095f8e81526020019081526020015f20600c0154815260200160095f8e81526020019081526020015f20600d0154815260200160095f8e81526020019081526020015f20600e01548152602001856001600160a01b0316815260200160095f8e81526020019081526020015f206015015f9054906101000a90046001600160a01b03166001600160a01b03168152602001876001600160a01b031681526020018a6001600160a01b0316815260200160095f8e81526020019081526020015f206016015f9054906101000a90046001600160a01b03166001600160a01b0316815260200160095f8e81526020019081526020015f206013015f9054906101000a90046001600160a01b03166001600160a01b03168152602001866001600160a01b03168152509050866001600160a01b031663cb3dc357826040518263ffffffff1660e01b815260040161129a9190612593565b5f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505050506112d18b88611b62565b6112db8b88611ca9565b5f8b8152600960205260409081902060110154905163f2fde38b60e01b81526001600160a01b038b81169263f2fde38b9261131c92909116906004016121a5565b5f604051808303815f87803b158015611333575f80fd5b505af1158015611345573d5f803e3d5ffd5b5050505f8c8152600960205260409081902060130154905163f2fde38b60e01b81526001600160a01b03808b16935063f2fde38b92611389929116906004016121a5565b5f604051808303815f87803b1580156113a0575f80fd5b505af11580156113b2573d5f803e3d5ffd5b5050505f8c8152600960205260409081902060130154905163f2fde38b60e01b81526001600160a01b03808916935063f2fde38b926113f6929116906004016121a5565b5f604051808303815f87803b15801561140d575f80fd5b505af115801561141f573d5f803e3d5ffd5b505050507f714892568bf1dfd927822710be2b993ecc9f4dae5f0c6bf9b119711a12d5fb158b60405161145491815260200190565b60405180910390a1505060015f55505050505050505050565b60025f540361148f57604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146114be57604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381166114e557604051633efa09af60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526007602052604090205460ff161561151e576040516379fd1e0560e11b815260040160405180910390fd5b6001600160a01b03165f908152600760205260408120805460ff191660019081179091559055565b60025f540361156857604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461159757604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381166115be57604051633efa09af60e01b815260040160405180910390fd5b6004546001600160a01b0316156115e8576040516373aa896760e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b039290921691909117905560015f55565b60025f540361163057604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461165f57604051630b2db9b760e31b815260040160405180910390fd5b61166881611dbd565b5060015f55565b5f808080806116dc6116b461168760c08901896122cd565b6116909161268a565b61169d60e08a018a6122cd565b6116a69161268a565b5f9182526020526040902090565b6116a66116c56101008a018a6122cd565b6116ce9161268a565b61169d6101208b018b6122cd565b90505f6117296117086116f260608a018a6122cd565b6116fb9161268a565b61169d60808b018b6122cd565b61171860608a0160408b01612242565b60ff165f9182526020526040902090565b90505f61175d61174b672ab839b434b33a1760c11b61169d60a08c018c6122cd565b5f8481526020869052604090206116a6565b90506117806a2a37b5b2b7283937bc3c9760a91b825f9182526020526040902090565b96506117a86f2a37b5b2b7283937bc3ca0b236b4b71760811b885f9182526020526040902090565b95506117cb6a2b30bab63a283937bc3c9760a91b885f9182526020526040902090565b94506117f36f2b30bab63a283937bc3ca0b236b4b71760811b865f9182526020526040902090565b93505050509193509193565b5f5b61180f6101e0830183612281565b90508110156118cf576118266101e0830183612281565b828181106118365761183661250f565b61184c92602060409092020190810191506121b9565b5f848152600a60209081526040808320858452909152902080546001600160a01b0319166001600160a01b03929092169190911790556118906101e0830183612281565b828181106118a0576118a061250f565b5f868152600b602090815260408083208784528252918290209190920293909301013590915550600101611801565b505f5b6118e0610200830183612281565b90508110156119a0576118f7610200830183612281565b828181106119075761190761250f565b61191d92602060409092020190810191506121b9565b5f848152600c60209081526040808320858452909152902080546001600160a01b0319166001600160a01b0392909216919091179055611961610200830183612281565b828181106119715761197161250f565b5f868152600d6020908152604080832087845282529182902091909202939093010135909155506001016118d2565b505050565b600280546001600160a01b03191690556119be81611e4a565b50565b5f818152600960205260408120600281015460038201546005546012840154600f90940180548695611a889594936001600160a01b0390811693911691611a07906123b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611a33906123b7565b8015611a7e5780601f10611a5557610100808354040283529160200191611a7e565b820191905f5260205f20905b815481529060010190602001808311611a6157829003601f168201915b5050505050611ec2565b6005546040519294509092507fa8bb59c0ffcc9833d1ff47a631a1bcbc76b2da935566a08f663e6c8ad1b5ba8491611acd91849186916001600160a01b0316906126a8565b60405180910390a1915091565b5f818152600960205260408120805460018201546006546014840154601090940180548695611b1d9594936001600160a01b0390811693911691611a07906123b7565b6006546040519294509092507f26ad9f07a47e389150a15677a365d64f42af0000b792c182ada6a3b5ab193a0b91611acd91849186916001600160a01b0316906126a8565b5f8281526009602052604081206004015490816001600160401b03811115611b8c57611b8c6123a3565b604051908082528060200260200182016040528015611bd057816020015b604080518082019091525f8082526020820152815260200190600190039081611baa5790505b5090505f5b82811015611c49576040805180820182525f878152600a60209081528382208583528152838220546001600160a01b03168352888252600b8152838220858352815292902054918101919091528251839083908110611c3657611c3661250f565b6020908102919091010152600101611bd5565b506040516314a28d1160e11b81526001600160a01b038416906329451a2290611c769084906004016126cb565b5f604051808303815f87803b158015611c8d575f80fd5b505af1158015611c9f573d5f803e3d5ffd5b5050505050505050565b5f8281526009602052604081206005015490816001600160401b03811115611cd357611cd36123a3565b604051908082528060200260200182016040528015611d1757816020015b604080518082019091525f8082526020820152815260200190600190039081611cf15790505b5090505f5b82811015611d90576040805180820182525f878152600c60209081528382208583528152838220546001600160a01b03168352888252600d8152838220858352815292902054918101919091528251839083908110611d7d57611d7d61250f565b6020908102919091010152600101611d1c565b50604051631bca511360e01b81526001600160a01b03841690631bca511390611c769084906004016126cb565b6001600160a01b0381161580611ddb57506001600160a01b03811630145b15611df95760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b6001600160a01b038116611e715760405163156fee5160e31b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f805f80611ed28989898861204e565b915091505f826001600160a01b03163b1180611ef757505f816001600160a01b03163b115b15611f1557604051631f99271960e11b815260040160405180910390fd5b5f89604051611f239061217e565b8190604051809103905ff5905080158015611f40573d5f803e3d5ffd5b509050826001600160a01b0316816001600160a01b031614611f7557604051633e89a13360e01b815260040160405180910390fd5b5f89898389604051611f869061218b565b611f9293929190612722565b8190604051809103905ff5905080158015611faf573d5f803e3d5ffd5b509050826001600160a01b0316816001600160a01b031614611fe457604051631b0a7c4160e31b815260040160405180910390fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b90612010908b906004016121a5565b5f604051808303815f87803b158015612027575f80fd5b505af1158015612039573d5f803e3d5ffd5b50959d949c50939a5050505050505050505050565b5f8060ff60f81b3087604051806020016120679061217e565b6020820181038252601f19601f82011660405250805190602001206040516020016120959493929190612775565b604051602081830303815290604052805190602001205f1c915060ff60f81b3086604051806020016120c69061218b565b601f1982820381018352601f9091011660408190526120ed90899088908a90602001612722565b60408051601f198184030181529082905261210b92916020016127c5565b604051602081830303815290604052805190602001206040516020016121349493929190612775565b604051602081830303815290604052805190602001205f1c905094509492505050565b610846806127e283390190565b6114838061302883390190565b610384806144ab83390190565b6108488061482f83390190565b610d048061507783390190565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b5f602082840312156121c9575f80fd5b81356001600160a01b03811681146121df575f80fd5b9392505050565b5f602082840312156121f6575f80fd5b81356001600160401b0381111561220b575f80fd5b820161034081850312156121df575f80fd5b5f6020828403121561222d575f80fd5b5035919050565b60ff811681146119be575f80fd5b5f60208284031215612252575f80fd5b81356121df81612234565b5f6001820161227a57634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f808335601e19843603018112612296575f80fd5b8301803591506001600160401b038211156122af575f80fd5b6020019150600681901b36038213156122c6575f80fd5b9250929050565b5f808335601e198436030181126122e2575f80fd5b8301803591506001600160401b038211156122fb575f80fd5b6020019150368190038213156122c6575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038716815260ff861660208201526080604082018190525f90612364908301868861230f565b828103606084015261237781858761230f565b9998505050505050505050565b5f60208284031215612394575f80fd5b813580151581146121df575f80fd5b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806123cb57607f821691505b6020821081036123e957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156119a057805f5260205f20601f840160051c810160208510156124145750805b601f840160051c820191505b81811015612433575f8155600101612420565b5050505050565b81516001600160401b03811115612453576124536123a3565b6124678161246184546123b7565b846123ef565b6020601f821160018114612499575f83156124825750848201515b5f19600385901b1c1916600184901b178455612433565b5f84815260208120601f198516915b828110156124c857878501518255602094850194600190920191016124a8565b50848210156124e557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215612504575f80fd5b81516121df81612234565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561255c5781516001600160a01b0316865260209586019590910190600101612535565b5093949350505050565b604081525f6125786040830185612523565b828103602084015261258a8185612523565b95945050505050565b5f61020082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151612605610120840182612198565b5061014083015161261a610140840182612198565b5061016083015161262f610160840182612198565b50610180830151612644610180840182612198565b506101a08301516126596101a0840182612198565b506101c083015161266e6101c0840182612198565b506101e08301516126836101e0840182612198565b5092915050565b803560208310156126a2575f19602084900360031b1b165b92915050565b6001600160a01b0393841681529183166020830152909116604082015260600190565b602080825282518282018190525f918401906040840190835b8181101561271757835180516001600160a01b0316845260209081015181850152909301926040909201916001016126e4565b509095945050505050565b60018060a01b038416815260018060a01b0383166020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f830116840101915050949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b5f81518060208401855e5f93019283525090919050565b5f6127d96127d383866127ae565b846127ae565b94935050505056fe60c060405234801561000f575f80fd5b5060405161084638038061084683398101604081905261002e91610067565b61012c8110156100515760405163dd09ae8560e01b815260040160405180910390fd5b6001600160a01b0390911660805260a05261009e565b5f8060408385031215610078575f80fd5b82516001600160a01b038116811461008e575f80fd5b6020939093015192949293505050565b60805160a0516107666100e05f395f818160c3015261029d01525f8181607f0152818161038301528181610535015281816105b8015261064301526107665ff3fe608060405234801561000f575f80fd5b5060043610610076575f3560e01c80632b3ed84e1461007a5780634623c81e146100be578063548eac04146100f35780637a02dc06146101085780637c10dea61461017f578063af6f8c1b146101bc578063b535b5c3146101cf578063c4d252f514610200575b5f80fd5b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e57f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b5565b6101066101013660046106b0565b610213565b005b61015b6101163660046106b0565b604080518082019091525f8082526020820152505f90815260016020818152604092839020835180850190945280548452909101546001600160a01b03169082015290565b60408051825181526020928301516001600160a01b031692810192909252016100b5565b6101ae61018d3660046106b0565b600160208190525f918252604090912080549101546001600160a01b031682565b6040516100b59291906106c7565b6101066101ca3660046106b0565b610352565b6101f06101dd3660046106b0565b5f90815260016020526040902054151590565b60405190151581526020016100b5565b61010661020e3660046106b0565b610480565b60025f5403610235576040516306fda65d60e31b815260040160405180910390fd5b60025f55806102575760405163e0f8778160e01b815260040160405180910390fd5b5f81815260016020819052604090912001546001600160a01b03161561029057604051632da5055760e21b815260040160405180910390fd5b60405180604001604052807f0000000000000000000000000000000000000000000000000000000000000000426102c791906106de565b81523360209182018190525f84815260018084526040918290208551815594909301519390920180546001600160a01b0319166001600160a01b0390941693909317909255517f6ef595d41bb19bf4009067ebfca1e965c782641ffd735166641d1832d9955ca59161033b918491906106c7565b60405180910390a161034b610532565b5060015f55565b60025f5403610374576040516306fda65d60e31b815260040160405180910390fd5b60025f55336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c0576040516282b42960e81b815260040160405180910390fd5b5f8181526001602081905260409091205410156103f057604051637d9b58e760e11b815260040160405180910390fd5b5f8181526001602052604090205442101561041e576040516331524f6360e21b815260040160405180910390fd5b5f818152600160208190526040808320928355910180546001600160a01b0319169055517fc0c97b5bfc2b0d319a6dadd3efddd19273d76957d4cf2c1f72697f8b589dea059061047190839033906106c7565b60405180910390a15060015f55565b60025f54036104a2576040516306fda65d60e31b815260040160405180910390fd5b60025f90815581815260016020819052604090912001546001600160a01b03166104df57604051637d9b58e760e11b815260040160405180910390fd5b5f818152600160208190526040808320928355910180546001600160a01b0319169055517f37a82c88859b7ebdc11c1ada9b2f845df41bcf0b0f60931aad69c56bf38440149061033b90839033906106c7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561058f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b39190610703565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663127effb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610612573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106369190610703565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061067a5750336001600160a01b03831614155b801561068f5750336001600160a01b03821614155b156106ac576040516282b42960e81b815260040160405180910390fd5b5050565b5f602082840312156106c0575f80fd5b5035919050565b9182526001600160a01b0316602082015260400190565b808201808211156106fd57634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610713575f80fd5b81516001600160a01b0381168114610729575f80fd5b939250505056fea2646970667358221220e39df925ca5834ec0cfa1ce6d572be158d121cd1407ee3bdd3b8116e4fe84d6564736f6c634300081a003360c060405234801561000f575f80fd5b5060405161148338038061148383398101604081905261002e91610129565b6001600160a01b0382166100555760405163156fee5160e31b815260040160405180910390fd5b6001600160a01b03811661007c5760405163e6c4247b60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156100dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610100919061015a565b60ff1660a052506101819050565b80516001600160a01b0381168114610124575f80fd5b919050565b5f806040838503121561013a575f80fd5b6101438361010e565b91506101516020840161010e565b90509250929050565b5f6020828403121561016a575f80fd5b815160ff8116811461017a575f80fd5b9392505050565b60805160a0516112a36101e05f395f818160c501528181610994015281816109c801528181610a6801528181610a9501528181610ad30152610b3601525f818161024101528181610361015281816105170152610bce01526112a35ff3fe608060405234801561000f575f80fd5b50600436106100bc575f3560e01c80638da5cb5b116100795780638da5cb5b146101dd578063a22484d9146101ee578063ad07802114610203578063c8d2df5614610216578063d861811514610229578063ded4a6fe1461023c578063f2fde38b14610263575f80fd5b8063304cef9d146100c05780633af32abf146100fe57806348ad6f5c1461013b578063544821731461015057806356f1b54614610188578063803bc5e2146101b0575b5f80fd5b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b61012b61010c366004610eb0565b6001600160a01b039081165f9081526003602052604090205416151590565b60405190151581526020016100f5565b61014e610149366004610ec9565b610276565b005b61017b61015e366004610eb0565b6001600160a01b039081165f908152600360205260409020541690565b6040516100f59190610ef3565b61019b610196366004610f07565b6102e7565b604080519283526020830191909152016100f5565b6101cf6101be366004610eb0565b60046020525f908152604090205481565b6040519081526020016100f5565b6001546001600160a01b031661017b565b6101f66103e2565b6040516100f59190610f58565b6101cf610211366004610fa3565b610442565b6101cf610224366004610fba565b610453565b61014e610237366004610fe2565b610465565b61017b7f000000000000000000000000000000000000000000000000000000000000000081565b61014e610271366004610eb0565b61077d565b60025f540361029857604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146102c757604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b03165f9081526004602052604081209190915560019055565b5f8060018410156102fc57505f9050806103d8565b5f876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610339573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035d919061101c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316146103a7576103a287866107de565b6103a9565b845b91505f6103b68786610baa565b9050600182106103d1576103cc8383835f610d1a565b6103d3565b825b935050505b9550959350505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561043857602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161041a575b5050505050905090565b5f61044d3383610baa565b92915050565b5f61045e83836107de565b9392505050565b60025f540361048757604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146104b657604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b03821615806104d357506001600160a01b038316155b156104f157604051633efa09af60e01b815260040160405180910390fd5b600254601e10156105155760405163be8f94e960e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603610567576040516319fc848960e21b815260040160405180910390fd5b6001600160a01b038381165f9081526003602052604090206001015416156105a257604051635405c10760e11b815260040160405180910390fd5b600280546001810182555f9182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386169081179091556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610627573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064b9190611033565b905060068160ff16101561067257604051630da74dab60e01b815260040160405180910390fd5b5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d39190611033565b604080516080810182526001600160a01b039687168152968616602080890182815260ff9485168a850190815296851660608b019081525f938452600383528484209a518b54908b166001600160a01b0319909116178b55905160019a8b018054985192518716600160a81b0260ff60a81b1993909716600160a01b026001600160a81b031990991691909a16179690961795909516929092179095556004909252509182205555565b60025f540361079f57604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146107ce57604051630b2db9b760e31b815260040160405180910390fd5b6107d781610d75565b5060015f55565b6001600160a01b038083165f9081526003602052604080822080546001909101548251633fabe5a360e21b815292519394919091169260ff600160a81b8304811693600160a01b90930416918591829182918291889163feaf968c9160048082019260a0929091908290030181865afa15801561085d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108819190611069565b94509450509350935060018312156108ab5760405162fc7cad60e51b815260040160405180910390fd5b836001600160501b0316816001600160501b031610156108de57604051630cd5fa0760e11b815260040160405180910390fd5b60018210156108ff5760405162ace4c560e51b815260040160405180910390fd5b42821115610920576040516352c4db3960e11b815260040160405180910390fd5b6001600160a01b038a165f9081526004602052604090205461094283426110cb565b1115610961576040516329fc802760e11b815260040160405180910390fd5b5f8660ff168660ff161161097657600161098b565b61098087876110de565b61098b90600a6111da565b90505f8660ff167f000000000000000000000000000000000000000000000000000000000000000060ff16116109c25760016109f7565b6109ec877f00000000000000000000000000000000000000000000000000000000000000006110de565b6109f790600a6111da565b90505f610a04838d6111e8565b90505f610a128960126110de565b610a1d90600a6111da565b90505f8782610a2d8c600a6111da565b610a3791906111e8565b610a419190611213565b90505f8285610a5086856111e8565b610a5a91906111e8565b610a649190611213565b90507f000000000000000000000000000000000000000000000000000000000000000060ff168c60ff1603610b34577f000000000000000000000000000000000000000000000000000000000000000060ff16600603610acf57610ac88682611213565b9050610b34565b60117f000000000000000000000000000000000000000000000000000000000000000060ff161115610b3457889150670de0b6b3a76400008386610b1387866111e8565b610b1d91906111e8565b610b279190611213565b610b319190611213565b90505b7f000000000000000000000000000000000000000000000000000000000000000060ff16600603610b97578b60ff16601203610b7e57610b776298968082611213565b9050610b97565b8b60ff16600803610b9757610b94606482611213565b90505b9f9e505050505050505050505050505050565b6002546040516370a0823160e01b81525f9182918291829182906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610c03908b90600401610ef3565b602060405180830381865afa158015610c1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c42919061101c565b610c4c9088611232565b90505f5b82811015610d0e5760028181548110610c6b57610c6b611245565b5f918252602090912001546040516370a0823160e01b81526001600160a01b03909116965086906370a0823190610ca6908c90600401610ef3565b602060405180830381865afa158015610cc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce5919061101c565b94508415610d0657610cf786866107de565b9350610d038483611232565b91505b600101610c50565b50979650505050505050565b5f80610d27868686610ded565b90506001836002811115610d3d57610d3d611259565b148015610d5957505f8480610d5457610d546111ff565b868809115b15610d6c57610d69600182611232565b90505b95945050505050565b6001600160a01b038116610d9c5760405163156fee5160e31b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f80805f19858709858702925082811083820303915050805f03610e2457838281610e1a57610e1a6111ff565b049250505061045e565b808411610e2f575f80fd5b5f84868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203025f889003889004909101858311909403939093029303949094049190911702949350505050565b80356001600160a01b0381168114610eab575f80fd5b919050565b5f60208284031215610ec0575f80fd5b61045e82610e95565b5f8060408385031215610eda575f80fd5b82359150610eea60208401610e95565b90509250929050565b6001600160a01b0391909116815260200190565b5f805f805f60a08688031215610f1b575f80fd5b610f2486610e95565b9450610f3260208701610e95565b9350610f4060408701610e95565b94979396509394606081013594506080013592915050565b602080825282518282018190525f918401906040840190835b81811015610f985783516001600160a01b0316835260209384019390920191600101610f71565b509095945050505050565b5f60208284031215610fb3575f80fd5b5035919050565b5f8060408385031215610fcb575f80fd5b610fd483610e95565b946020939093013593505050565b5f805f60608486031215610ff4575f80fd5b610ffd84610e95565b925061100b60208501610e95565b929592945050506040919091013590565b5f6020828403121561102c575f80fd5b5051919050565b5f60208284031215611043575f80fd5b815160ff8116811461045e575f80fd5b80516001600160501b0381168114610eab575f80fd5b5f805f805f60a0868803121561107d575f80fd5b61108686611053565b602087015160408801516060890151929750909550935091506110ab60808701611053565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561044d5761044d6110b7565b60ff828116828216039081111561044d5761044d6110b7565b6001815b600184111561113257808504811115611116576111166110b7565b600184161561112457908102905b60019390931c9280026110fb565b935093915050565b5f826111485750600161044d565b8161115457505f61044d565b816001811461116a576002811461117457611190565b600191505061044d565b60ff841115611185576111856110b7565b50506001821b61044d565b5060208310610133831016604e8410600b84101617156111b3575081810a61044d565b6111bf5f1984846110f7565b805f19048211156111d2576111d26110b7565b029392505050565b5f61045e60ff84168361113a565b808202811582820484141761044d5761044d6110b7565b634e487b7160e01b5f52601260045260245ffd5b5f8261122d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561044d5761044d6110b7565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea26469706673582212200792f3e5793e76cbef67986263c17360de2bb170e6cfe82be1278f07905f6ea664736f6c634300081a00336080604052348015600e575f80fd5b50604051610384380380610384833981016040819052602b91604f565b600180546001600160a01b0319166001600160a01b0392909216919091179055607a565b5f60208284031215605e575f80fd5b81516001600160a01b03811681146073575f80fd5b9392505050565b6102fd806100875f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80633af32abf146100595780633ca40a24146100995780638da5cb5b146100ae5780639d74164f146100c9578063f2fde38b146100dc575b5f80fd5b61008461006736600461029a565b6001600160a01b03165f9081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ac6100a736600461029a565b6100ef565b005b6001546040516001600160a01b039091168152602001610090565b6100ac6100d736600461029a565b61013a565b6100ac6100ea36600461029a565b6101c1565b6001546001600160a01b0316331461011a57604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b03165f908152600260205260409020805460ff19169055565b6001546001600160a01b0316331461016557604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604090205460ff161561019e5760405163080fc0bd60e11b815260040160405180910390fd5b6001600160a01b03165f908152600260205260409020805460ff19166001179055565b60025f54036101e357604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461021257604051630b2db9b760e31b815260040160405180910390fd5b61021b81610222565b5060015f55565b6001600160a01b0381166102495760405163156fee5160e31b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f602082840312156102aa575f80fd5b81356001600160a01b03811681146102c0575f80fd5b939250505056fea2646970667358221220be18e6996a2fa74d3aa9eb3edf47cca5abdb7ca7f15343a443cf2b1331db250064736f6c634300081a00336080604052348015600e575f80fd5b50600180546001600160a01b0319163317905561081a8061002e5f395ff3fe608060405260043610610075575f3560e01c8063204e1c7a1461007957806379ba5097146100ae5780637eff275e146100c45780638da5cb5b146100e35780639623609d1461010057806399a88ec414610113578063e30c397814610132578063f2fde38b1461014f578063f3b7dead1461016e575b5f80fd5b348015610084575f80fd5b5061009861009336600461062d565b61018d565b6040516100a5919061064f565b60405180910390f35b3480156100b9575f80fd5b506100c261022d565b005b3480156100cf575f80fd5b506100c26100de366004610663565b61028c565b3480156100ee575f80fd5b506001546001600160a01b0316610098565b6100c261010e3660046106ae565b61033e565b34801561011e575f80fd5b506100c261012d366004610663565b6103f6565b34801561013d575f80fd5b506002546001600160a01b0316610098565b34801561015a575f80fd5b506100c261016936600461062d565b610473565b348015610179575f80fd5b5061009861018836600461062d565b6104d4565b5f805f836001600160a01b03166040516101b190635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101e9576040519150601f19603f3d011682016040523d82523d5f602084013e6101ee565b606091505b509150915081610211576040516385be45b560e01b815260040160405180910390fd5b808060200190518101906102259190610785565b949350505050565b60025f540361024f57604051633ee5aeb560e01b815260040160405180910390fd5b60025f819055546001600160a01b0316331461027d576040516282b42960e81b815260040160405180910390fd5b610286336104f8565b60015f55565b60025f54036102ae57604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146102dd57604051630b2db9b760e31b815260040160405180910390fd5b6040516308f2839760e41b81526001600160a01b03831690638f2839709061030990849060040161064f565b5f604051808303815f87803b158015610320575f80fd5b505af1158015610332573d5f803e3d5ffd5b505060015f5550505050565b60025f540361036057604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461038f57604051630b2db9b760e31b815260040160405180910390fd5b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906103bf90869086906004016107a0565b5f604051808303818588803b1580156103d6575f80fd5b505af11580156103e8573d5f803e3d5ffd5b505060015f55505050505050565b60025f540361041857604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b0316331461044757604051630b2db9b760e31b815260040160405180910390fd5b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe69061030990849060040161064f565b60025f540361049557604051633ee5aeb560e01b815260040160405180910390fd5b60025f556001546001600160a01b031633146104c457604051630b2db9b760e31b815260040160405180910390fd5b6104cd81610514565b5060015f55565b5f805f836001600160a01b03166040516101b1906303e1469160e61b815260040190565b600280546001600160a01b0319169055610511816105a1565b50565b6001600160a01b038116158061053257506001600160a01b03811630145b156105505760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b6001600160a01b0381166105c85760405163156fee5160e31b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0381168114610511575f80fd5b5f6020828403121561063d575f80fd5b813561064881610619565b9392505050565b6001600160a01b0391909116815260200190565b5f8060408385031215610674575f80fd5b823561067f81610619565b9150602083013561068f81610619565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156106c0575f80fd5b83356106cb81610619565b925060208401356106db81610619565b9150604084013567ffffffffffffffff8111156106f6575f80fd5b8401601f81018613610706575f80fd5b803567ffffffffffffffff8111156107205761072061069a565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561074f5761074f61069a565b604052818152828201602001881015610766575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f60208284031215610795575f80fd5b815161064881610619565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea26469706673582212201b7cb67f430ac74aaa69eb28b2f80d89de383da707a21a5c60e8c03e9e44542064736f6c634300081a00336080604052604051610d04380380610d04833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f80516020610cbd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f8383604051806060016040528060278152602001610cdd60279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f80516020610cbd8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f80856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156103d5575f80fd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f80fd5b8401601f81018613610417575f80fd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6107d1806104ec5f395ff3fe60806040526004361061004d575f3560e01c80633659cfe6146100645780634f1ef286146100775780635c60da1b1461008a5780638f283970146100ae578063f851a440146100c15761005c565b3661005c5761005a6100c9565b005b61005a6100c9565b61005a610072366004610692565b6100e3565b61005a6100853660046106ab565b610126565b61009261018c565b6040516001600160a01b03909116815260200160405180910390f35b61005a6100bc366004610692565b6101c4565b6100926101ec565b6100d1610214565b6100e16100dc6102a9565b6102b2565b565b6100eb6102d0565b6001600160a01b0316330361011e57610102610302565b61011b8160405180602001604052805f8152505f61030c565b50565b61011b6100c9565b61012e6102d0565b6001600160a01b031633036101845761017f8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506001925061030c915050565b505050565b61017f6100c9565b5f6101956102d0565b6001600160a01b031633036101b9576101ac610302565b6101b46102a9565b905090565b6101c16100c9565b90565b6101cc6102d0565b6001600160a01b0316330361011e576101e3610302565b61011b81610336565b5f6101f56102d0565b6001600160a01b031633036101b95761020c610302565b6101b46102d0565b61021c6102d0565b6001600160a01b031633036100e15760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b5f6101b461038a565b365f80375f80365f845af43d5f803e8080156102cc573d5ff35b3d5ffd5b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b34156100e1575f80fd5b610315836103b1565b5f825111806103215750805b1561017f5761033083836103f0565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035f6102d0565b604080516001600160a01b03928316815291841660208301520160405180910390a161011b8161041c565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102f3565b6103ba816104c5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610415838360405180606001604052806027815260200161077560279139610559565b9392505050565b6001600160a01b0381166104815760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a0565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105325760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102a0565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104a4565b60605f80856001600160a01b0316856040516105759190610729565b5f60405180830381855af49150503d805f81146105ad576040519150601f19603f3d011682016040523d82523d5f602084013e6105b2565b606091505b50915091506105c3868383876105cd565b9695505050505050565b6060831561063b5782515f03610634576001600160a01b0385163b6106345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a0565b5081610645565b610645838361064d565b949350505050565b81511561065d5781518083602001fd5b8060405162461bcd60e51b81526004016102a0919061073f565b80356001600160a01b038116811461068d575f80fd5b919050565b5f602082840312156106a2575f80fd5b61041582610677565b5f805f604084860312156106bd575f80fd5b6106c684610677565b9250602084013567ffffffffffffffff8111156106e1575f80fd5b8401601f810186136106f1575f80fd5b803567ffffffffffffffff811115610707575f80fd5b866020828401011115610718575f80fd5b939660209190910195509293505050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220244ae7aa11a73f909022b1cbbd83d7e1609d3384e2b43f0c45f3ca67c301d74664736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122061a2e8f44c321f33b759a4a56771fa795f0f6f59a84f03c1a7fe4ad809eec17764736f6c634300081a0033000000000000000000000000c573100a879f480c9ae5290f865a1e354f4ba67f