0 txs
1 call
constructor
No constructor.
functions
flashFee
purefunction flashFee(address, uint256) pure returns (uint256)
maxFlashLoan
viewfunction maxFlashLoan(address token) view returns (uint256)
orderExists
viewfunction orderExists(bytes32 orderHash) view returns (bool)
quote
viewfunction quote(tuple quoteConfig) view returns (bool, uint256, uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
vaultBalance
viewfunction vaultBalance(address owner, address token, uint256 vaultId) view returns (uint256)
addOrder2
nonpayablefunction addOrder2(tuple orderConfig, tuple[] post) returns (bool)
clear2
nonpayablefunction clear2(tuple aliceOrder, tuple bobOrder, tuple clearConfig, tuple[] aliceSignedContext, tuple[] bobSignedContext)
deposit2
nonpayablefunction deposit2(address token, uint256 vaultId, uint256 depositAmount, tuple[] post)
entask
nonpayablefunction entask(tuple[] post)
flashLoan
nonpayablefunction flashLoan(address receiver, address token, uint256 amount, bytes data) returns (bool)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removeOrder2
nonpayablefunction removeOrder2(tuple order, tuple[] post) returns (bool stateChanged)
takeOrders2
nonpayablefunction takeOrders2(tuple config) returns (uint256 totalTakerInput, uint256 totalTakerOutput)
withdraw2
nonpayablefunction withdraw2(address token, uint256 vaultId, uint256 targetAmount, tuple[] post)
events
AddOrderV2
event AddOrderV2(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order)
AfterClear
event AfterClear(address sender, (uint256 aliceOutput, uint256 bobOutput, uint256 aliceInput, uint256 bobInput) clearStateChange)
ClearV2
event ClearV2(address sender, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) alice, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) bob, (uint256 aliceInputIOIndex, uint256 aliceOutputIOIndex, uint256 bobInputIOIndex, uint256 bobOutputIOIndex, uint256 aliceBountyVaultId, uint256 bobBountyVaultId) clearConfig)
Context
event Context(address sender, uint256[][] context)
Deposit
event Deposit(address sender, address token, uint256 vaultId, uint256 amount)
MetaV1_2
event MetaV1_2(address sender, bytes32 subject, bytes meta)
OrderExceedsMaxRatio
event OrderExceedsMaxRatio(address sender, address owner, bytes32 orderHash)
OrderNotFound
event OrderNotFound(address sender, address owner, bytes32 orderHash)
OrderZeroAmount
event OrderZeroAmount(address sender, address owner, bytes32 orderHash)
RemoveOrderV2
event RemoveOrderV2(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order)
TakeOrderV2
event TakeOrderV2(address sender, ((address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order, uint256 inputIOIndex, uint256 outputIOIndex, (address signer, uint256[] context, bytes signature)[] signedContext) config, uint256 input, uint256 output)
Withdraw
event Withdraw(address sender, address token, uint256 vaultId, uint256 targetAmount, uint256 amount)
errors
ClearZeroAmount
error ClearZeroAmount()
FlashLenderCallbackFailed
error FlashLenderCallbackFailed(bytes32 result)
InvalidSignature
error InvalidSignature(uint256 i)
MinimumInput
error MinimumInput(uint256 minimumInput, uint256 input)
NoOrders
error NoOrders()
NotOrderOwner
error NotOrderOwner(address sender, address owner)
NotRainMetaV1
error NotRainMetaV1(bytes unmeta)
OrderNoHandleIO
error OrderNoHandleIO()
OrderNoInputs
error OrderNoInputs()
OrderNoOutputs
error OrderNoOutputs()
OrderNoSources
error OrderNoSources()
SameOwner
error SameOwner()
TokenDecimalsMismatch
error TokenDecimalsMismatch()
TokenMismatch
error TokenMismatch()
TokenSelfTrade
error TokenSelfTrade()
UnsupportedCalculateOutputs
error UnsupportedCalculateOutputs(uint256 outputs)
ZeroDepositAmount
error ZeroDepositAmount(address sender, address token, uint256 vaultId)
ZeroMaximumInput
error ZeroMaximumInput()
ZeroWithdrawTargetAmount
error ZeroWithdrawTargetAmount(address sender, address token, uint256 vaultId)
creation bytecode
0x6080604052348015600f57600080fd5b5060016000556158bd806100246000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391337c0a11610097578063d97b2e4811610066578063d97b2e4814610223578063d9d98ce414610263578063e0e530b714610279578063f513c42d146102a957600080fd5b806391337c0a146101ca578063a08f5dff146101dd578063a616864d146101f0578063ac9650d81461020357600080fd5b80632cb77e9f116100d35780632cb77e9f1461015f5780635cffe9de14610183578063613255ab146101965780638d7b6beb146101b757600080fd5b806301ffc9a7146100fa5780630997c4a0146101225780630d4f7f711461014a575b600080fd5b61010d61010836600461412f565b6102bc565b60405190151581526020015b60405180910390f35b610135610130366004614189565b610355565b60408051928352602083019190915201610119565b61015d610158366004614203565b610f55565b005b61010d61016d366004614245565b6000908152600160208190526040909120541490565b61010d610191366004614283565b610fa9565b6101a96101a4366004614322565b6110e1565b604051908152602001610119565b61010d6101c536600461433f565b611165565b61015d6101d83660046143a8565b6112bf565b61015d6101eb3660046148ce565b6114cf565b61010d6101fe366004614990565b611b17565b610216610211366004614203565b611e06565b6040516101199190614a19565b6101a9610231366004614a9b565b6001600160a01b0392831660009081526002602090815260408083209490951682529283528381209181529152205490565b6101a9610271366004614adc565b600092915050565b61028c610287366004614b08565b611eee565b604080519315158452602084019290925290820152606001610119565b61015d6102b73660046143a8565b61205d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe414309100000000000000000000000000000000000000000000000000000000148061034f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600080610360612283565b61036d6060840184614b43565b90506000036103a8576040517f9c95219f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103b0614053565b6103b8614081565b606060006103c887830188614b43565b604080516020600193909301830281019091529350880135915050600081900361041e576040517fc2ee700900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b61042e6060890189614b43565b90508110801561043e5750600082115b15610b74576104506060890189614b43565b8281811061046057610460614b8d565b90506020028101906104729190614bbc565b61047b90614bfa565b8051909550935061048f6060890189614b43565b60008181106104a0576104a0614b8d565b90506020028101906104b29190614bbc565b6104bc9080614c94565b6104ca906040810190614cc8565b6104d760608b018b614b43565b60008181106104e8576104e8614b8d565b90506020028101906104fa9190614bbc565b6020013581811061050d5761050d614b8d565b6105239260206060909202019081019150614322565b6001600160a01b0316846040015186602001518151811061054657610546614b8d565b6020026020010151600001516001600160a01b031614158061063f57506105706060890189614b43565b600081811061058157610581614b8d565b90506020028101906105939190614bbc565b61059d9080614c94565b6105ab906060810190614cc8565b6105b860608b018b614b43565b60008181106105c9576105c9614b8d565b90506020028101906105db9190614bbc565b604001358181106105ee576105ee614b8d565b6106049260206060909202019081019150614322565b6001600160a01b0316846060015186604001518151811061062757610627614b8d565b6020026020010151600001516001600160a01b031614155b15610676576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836060015185604001518151811061069057610690614b8d565b6020026020010151600001516001600160a01b031684604001518660200151815181106106bf576106bf614b8d565b6020026020010151600001516001600160a01b03160361070b576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107186060890189614b43565b600081811061072957610729614b8d565b905060200281019061073b9190614bbc565b6107459080614c94565b610753906040810190614cc8565b61076060608b018b614b43565b600081811061077157610771614b8d565b90506020028101906107839190614bbc565b6020013581811061079657610796614b8d565b90506060020160200160208101906107ae9190614d11565b60ff1684604001518660200151815181106107cb576107cb614b8d565b60200260200101516020015160ff161415806108b457506107ef6060890189614b43565b600081811061080057610800614b8d565b90506020028101906108129190614bbc565b61081c9080614c94565b61082a906060810190614cc8565b61083760608b018b614b43565b600081811061084857610848614b8d565b905060200281019061085a9190614bbc565b6040013581811061086d5761086d614b8d565b90506060020160200160208101906108859190614d11565b60ff1684606001518660400151815181106108a2576108a2614b8d565b60200260200101516020015160ff1614155b156108eb576040517f697e864b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108f6856122f6565b60008181526001602052604090205490915061095c578451604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610b6b565b60006109778688602001518960400151338b60600151612326565b90508960400135816060015111156109da578551604080513381526001600160a01b03909216602083015281018390527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610b69565b8060400151600003610a2e578551604080513381526001600160a01b03909216602083015281018390527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa906060016109cd565b60008660600151886040015181518110610a4a57610a4a614b8d565b602090810291909101810151015160408301519091506000610a718760ff8516600261297f565b905080821115610a7f578091505b50600080610a9d8560600151600185612a049092919063ffffffff16565b9050610add8a604001518c6020015181518110610abc57610abc614b8d565b60200260200101516020015160ff16600183612a229092919063ffffffff16565b915060009050610af28360ff86166002612a22565b9050610afe8189614d5d565b9750610b0a828d614d70565b9b50610b17828287612a84565b7f10de99b9032184587540c04e1850dff94a7683ae1fcc9eb06098621c739c0275338c8385604051610b4c9493929190614eaa565b60405180910390a150508651600101808852602002870183905250505b505b50600101610421565b610b828260208a0135614d5d565b965050508535851015610bd0576040517f45094d8800000000000000000000000000000000000000000000000000000000815286356004820152602481018690526044015b60405180910390fd5b8415610c8c57610c8c3386610be860608a018a614b43565b6000818110610bf957610bf9614b8d565b9050602002810190610c0b9190614bbc565b610c159080614c94565b610c23906060810190614cc8565b610c3060608c018c614b43565b6000818110610c4157610c41614b8d565b9050602002810190610c539190614bbc565b60400135818110610c6657610c66614b8d565b610c7c9260206060909202019081019150614322565b6001600160a01b03169190612dad565b6000610c9b6080880188614fb4565b90501115610e4e573363059bebe6610cb66060890189614b43565b6000818110610cc757610cc7614b8d565b9050602002810190610cd99190614bbc565b610ce39080614c94565b610cf1906060810190614cc8565b610cfe60608b018b614b43565b6000818110610d0f57610d0f614b8d565b9050602002810190610d219190614bbc565b60400135818110610d3457610d34614b8d565b610d4a9260206060909202019081019150614322565b610d5760608a018a614b43565b6000818110610d6857610d68614b8d565b9050602002810190610d7a9190614bbc565b610d849080614c94565b610d92906040810190614cc8565b610d9f60608c018c614b43565b6000818110610db057610db0614b8d565b9050602002810190610dc29190614bbc565b60200135818110610dd557610dd5614b8d565b610deb9260206060909202019081019150614322565b8888610dfa60808d018d614fb4565b6040518763ffffffff1660e01b8152600401610e1b96959493929190615026565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b505050505b8315610f0c57610f0c333086610e6760608b018b614b43565b6000818110610e7857610e78614b8d565b9050602002810190610e8a9190614bbc565b610e949080614c94565b610ea2906040810190614cc8565b610eaf60608d018d614b43565b6000818110610ec057610ec0614b8d565b9050602002810190610ed29190614bbc565b60200135818110610ee557610ee5614b8d565b610efb9260206060909202019081019150614322565b6001600160a01b0316929190612e5b565b60005b8151811015610f4257610f3a828281518110610f2d57610f2d614b8d565b6020026020010151612eb2565b600101610f0f565b50505050610f506001600055565b915091565b610f5d612283565b60408051600080825260208201909252610f9b91610f8b565b6060815260200190600190039081610f765790505b50610f96838561506b565b6130b8565b610fa56001600055565b5050565b6000610fbf6001600160a01b0386168786612dad565b6040517f23e30c8b0000000000000000000000000000000000000000000000000000000081526000906001600160a01b038816906323e30c8b906110119033908a908a9087908b908b90600401615026565b6020604051808303816000875af1158015611030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110549190615135565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981146110b2576040517f5b62c54800000000000000000000000000000000000000000000000000000000815260048101829052602401610bc7565b6110d487306110c2600089614d70565b6001600160a01b038a16929190612e5b565b5060019695505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611141573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190615135565b600061116f612283565b61117c6020850185614322565b6001600160a01b0316336001600160a01b0316146111e757336111a26020860186614322565b6040517f4702b9140000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015291166024820152604401610bc7565b60006111fa6111f58661514e565b6122f6565b600081815260016020526040902054909150600019016112ad5760008181526001602081905260408083209290925590519092507fa2d7a96afe77c99b6a2d72ca8b4d3c5c88b6466ee34ca74e0955951f449425c89061125f90339084908990615289565b60405180910390a16040805160028152602081018390523381830152606081019091526112ad906112a3905b60408051600181526020810192909252818101905290565b610f96858761506b565b506112b86001600055565b9392505050565b6112c7612283565b82600003611319576040517f40e97a5e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038616602482015260448101859052606401610bc7565b604080513381526001600160a01b0387166020820152908101859052606081018490527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79060800160405180910390a161137e6001600160a01b038616333086612e5b565b3360009081526002602090815260408083206001600160a01b038916845282528083208784529091529020546113b48482614d70565b3360009081526002602090815260408083206001600160a01b038b168452825280832089845290915290205581156114bd576000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144a919061538b565b60ff169050600061145d8383600061297f565b9050600061146d8784600061297f565b60408051600481526001600160a01b038c1660208201528082018b9052606081018590526080810183905260a081019091529091506114b9906114af9061128b565b610f96878961506b565b5050505b506114c86001600055565b5050505050565b6114d7612283565b835185516001600160a01b0391821691160361151f576040517f2a63c7cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836040015183604001358151811061153957611539614b8d565b6020026020010151600001516001600160a01b0316856060015184602001358151811061156857611568614b8d565b6020026020010151600001516001600160a01b03161415806115e4575060408501518051843590811061159d5761159d614b8d565b6020026020010151600001516001600160a01b031684606001518460600135815181106115cc576115cc614b8d565b6020026020010151600001516001600160a01b031614155b1561161b576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846060015183602001358151811061163557611635614b8d565b6020026020010151600001516001600160a01b0316856040015184600001358151811061166457611664614b8d565b6020026020010151600001516001600160a01b0316036116b0576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83604001518360400135815181106116ca576116ca614b8d565b60200260200101516020015160ff1685606001518460200135815181106116f3576116f3614b8d565b60200260200101516020015160ff1614158061175d575060408501518051843590811061172257611722614b8d565b60200260200101516020015160ff16846060015184606001358151811061174b5761174b614b8d565b60200260200101516020015160ff1614155b15611794576040517f697e864b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160006117a3886122f6565b81526020019081526020016000205403611815577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f33386600001516117e7886122f6565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611b0d565b600060016000611824876122f6565b81526020019081526020016000205403611868577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f33385600001516117e7876122f6565b7f692ee69af2843c70772be93470669f3c73e583316a047b6bfefdae5629de37ce3386868660405161189d94939291906153a8565b60405180910390a160006118c08685600001358660200135886000015186612326565b905060006118dd86866040013587606001358a6000015188612326565b905060006118eb8383613290565b90506119008160400151826000015185612a84565b6119138160600151826020015184612a84565b6060810151815160009161192691614d5d565b905060008260400151836020015161193e9190614d5d565b905081156119ca57336000908152600260209081526040822060608d01518051869492938d013590811061197457611974614b8d565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008a60800135815260200190815260200160002060008282546119c49190614d70565b90915550505b8015611a52573360009081526002602052604081206060808c015180518594928d01359081106119fc576119fc614b8d565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008a60a0013581526020019081526020016000206000828254611a4c9190614d70565b90915550505b5050604080513381528251602080830191909152830151818301529082015160608083019190915282015160808201527f3f20e55919cca701abb2a40ab72542b25ea7eed63a50f979dd2cd3231e5f488d9060a00160405180910390a1611ab883612eb2565b611ac182612eb2565b8051158015611ad257506020810151155b15611b09576040517f21badf1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505b6114c86001600055565b6000611b21612283565b611b2e6020850185614cc8565b9050600003611b69576040517f6c44ef8f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b766040850185614cc8565b9050600003611bb1576040517f540e5f0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810190915233815260009060208101611bd08780615425565b611bd990615459565b8152602001868060200190611bee9190614cc8565b808060200260200160405190810160405280939291908181526020016000905b82821015611c3a57611c2b60608302860136819003810190615465565b81526020019060010190611c0e565b5050509183525050602001611c526040880188614cc8565b808060200260200160405190810160405280939291908181526020016000905b82821015611c9e57611c8f60608302860136819003810190615465565b81526020019060010190611c72565b50505050508152602001866060013581525090506000611cbd826122f6565b600081815260016020526040902054909150158015611df85760008281526001602081905260409182902055835190517f3ce8bbe652d8778b67dd565c479c3bbaa843e55e477d075f756f889ec4bbdaee91611d1c9185908790615481565b60405180910390a16000611d3360a0890189614fb4565b90501115611dd057611d85611d4b60a0890189614fb4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e692505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec3699083611db760a08b018b614fb4565b604051611dc794939291906154a9565b60405180910390a15b604080516002815260208101849052338183015260608101909152611df8906114af9061128b565b925050506112b86001600055565b6040805160008152602081019091526060908267ffffffffffffffff811115611e3157611e31614412565b604051908082528060200260200182016040528015611e6457816020015b6060815260200190600190039081611e4f5790505b50915060005b83811015611ee657611ec130868684818110611e8857611e88614b8d565b9050602002810190611e9a9190614fb4565b85604051602001611ead939291906154d2565b60405160208183030381529060405261332a565b838281518110611ed357611ed3614b8d565b6020908102919091010152600101611e6a565b505092915050565b6000808080611f09611f008680614c94565b6111f59061514e565b60008181526001602081905260409091205491925014611f3457600080600093509350935050612056565b611f3e8580614c94565b611f4c906060810190614cc8565b8660400135818110611f6057611f60614b8d565b611f769260206060909202019081019150614322565b6001600160a01b0316611f898680614c94565b611f97906040810190614cc8565b8760200135818110611fab57611fab614b8d565b611fc19260206060909202019081019150614322565b6001600160a01b031603612001576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061203f6120108780614c94565b6120199061514e565b602088013560408901353361203160608c018c614b43565b61203a916154f9565b612326565b905060018160400151826060015194509450945050505b9193909250565b612065612283565b826000036120b7576040517ff7a898f60000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038616602482015260448101859052606401610bc7565b3360009081526002602090815260408083206001600160a01b03891684528252808320878452909152812054906120ee858361334f565b9050801561213d576121008183614d5d565b3360008181526002602090815260408083206001600160a01b038d168085529083528184208c85529092529091209290925561213d919083612dad565b604080513381526001600160a01b038916602082015290810187905260608101869052608081018290527febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9060a00160405180910390a18215612277576000876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fe919061538b565b60ff169050611b0961226d61128b8a6001600160a01b03168a6122238887600061297f565b61222f8888600061297f565b61223b8d89600261297f565b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b610f96868861506b565b50506114c86001600055565b6002600054036122ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc7565b6002600055565b6000816040516020016123099190615506565b604051602081830303815290604052805190602001209050919050565b61232e6140ec565b6000612339876122f6565b60408051600480825260a08201909252919250606091600091816020015b60608152602001906001900390816123575790505089516040805160038152602081018790526001600160a01b039283168183015291891660608301526080820190529091508160018003815181106123b2576123b2614b8d565b60200260200101819052506000600260008b600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b604001518b8151811061240057612400614b8d565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b604001518b8151811061244457612444614b8d565b602002602001015160400151815260200190815260200160002054905061254e8a604001518a8151811061247a5761247a614b8d565b6020026020010151600001516001600160a01b03168b604001518b815181106124a5576124a5614b8d565b60200260200101516020015160ff16670de0b6b3a76400000267ffffffffffffffff168c604001518c815181106124de576124de614b8d565b60200260200101516040015161251a858f604001518f8151811061250457612504614b8d565b60200260200101516020015160ff16600061297f565b600060408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b8260016003038151811061256457612564614b8d565b6020026020010181905250506000600260008b600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b606001518a815181106125b3576125b3614b8d565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b606001518a815181106125f7576125f7614b8d565b60200260200101516040015181526020019081526020016000205490506126b78a60600151898151811061262d5761262d614b8d565b6020026020010151600001516001600160a01b03168b606001518a8151811061265857612658614b8d565b60200260200101516020015160ff16670de0b6b3a76400000267ffffffffffffffff168c606001518b8151811061269157612691614b8d565b60200260200101516040015161251a858f606001518e8151811061250457612504614b8d565b826001600403815181106126cd576126cd614b8d565b6020026020010181905250506126e38186613365565b915050600088600001516001600160a01b031690506000808a60200151600001516001600160a01b031663d6e3357a8c602001516020015161272f863060009182526020526040902090565b60208f01516040015160008981604051908082528060200260200182016040528015612765578160200160208202803683370190505b506040518763ffffffff1660e01b815260040161278796959493929190615566565b600060405180830381865afa1580156127a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127cc9190810190615631565b915091506002825110156128115781516040517f3eee3954000000000000000000000000000000000000000000000000000000008152600401610bc791815260200190565b6020828101516040808501518e516001600160a01b03166000908152600290945290832060608f01518051939492938391908f90811061285357612853614b8d565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008f606001518e8151811061289757612897614b8d565b602002602001015160400151815260200190815260200160002054905060006128f08f606001518e815181106128cf576128cf614b8d565b60200260200101516020015160ff1660008461297f9092919063ffffffff16565b9050808311156128fe578092505b5050604080516002815260208101839052808201849052606081019091528660028151811061292f5761292f614b8d565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525097505050505050505095945050505050565b600082601211156129b457601283900360028316156129aa576129a28582613668565b9150506112b8565b6129a285826136b9565b60128311156129fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160018316156129f3576129a285826136f1565b6129a2858261373f565b50826112b8565b6000612a1a8484670de0b6b3a764000085613762565b949350505050565b60008260121115612a4557601283900360018316156129f3576129a285826136f1565b60128311156129fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160028316156129aa576129a28582613668565b612adf83670de0b6b3a76400008360800151600381518110612aa857612aa8614b8d565b6020026020010151600181518110612ac257612ac2614b8d565b602002602001015181612ad757612ad7615695565b04600061297f565b8160800151600381518110612af657612af6614b8d565b6020026020010151600481518110612b1057612b10614b8d565b602002602001018181525050612b7782670de0b6b3a76400008360800151600481518110612b4057612b40614b8d565b6020026020010151600181518110612b5a57612b5a614b8d565b602002602001015181612b6f57612b6f615695565b04600161297f565b8160800151600481518110612b8e57612b8e614b8d565b6020026020010151600481518110612ba857612ba8614b8d565b60209081029190910101528215612c8f578051516001600160a01b0316600090815260026020526040812060808301518051869391906003908110612bef57612bef614b8d565b6020026020010151600081518110612c0957612c09614b8d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360800151600381518110612c4a57612c4a614b8d565b6020026020010151600281518110612c6457612c64614b8d565b602002602001015181526020019081526020016000206000828254612c899190614d70565b90915550505b8115612d6b578051516001600160a01b0316600090815260026020526040812060808301518051859391906004908110612ccb57612ccb614b8d565b6020026020010151600081518110612ce557612ce5614b8d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360800151600481518110612d2657612d26614b8d565b6020026020010151600281518110612d4057612d40614b8d565b602002602001015181526020019081526020016000206000828254612d659190614d5d565b90915550505b7f17a5c0f3785132a57703932032f6863e7920434150aa1dc940e567b440fdce1f338260800151604051612da09291906156c4565b60405180910390a1505050565b6040516001600160a01b038316602482015260448101829052612e569084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526137bf565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612eac9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612df2565b50505050565b60c08101515115612f4a578051602090810151015160a082015160c08301516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263946aadc692612f179290916004016156e6565b600060405180830381600087803b158015612f3157600080fd5b505af1158015612f45573d6000803e3d6000fd5b505050505b805160209081015180519082015160a08401516000908152309093526040832083926001600160a01b03169163d6e3357a918651602001516040015160808801516001906000604051908082528060200260200182016040528015612fb9578160200160208202803683370190505b506040518763ffffffff1660e01b8152600401612fdb96959493929190615566565b600060405180830381865afa158015612ff8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130209190810190615631565b8051919350915015612e56578251602090810151015160a08401516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163946aadc6916130819185906004016156e6565b600060405180830381600087803b15801561309b57600080fd5b505af11580156130af573d6000803e3d6000fd5b50505050505050565b336130eb6040805160a0810182526000918101828152606080830193909352608082018390528152602081019190915290565b60005b83518110156114c85783818151811061310957613109614b8d565b60200260200101519150600082600001516040015151111561328857815180516020918201516000868152309093526040832083926001600160a01b03169163d6e3357a9187600001516040015160006131678d8b60200151613365565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e089901b169091526131b395949392919060248101615566565b600060405180830381865afa1580156131d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131f89190810190615631565b8051919350915015613285578351602001516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063946aadc69061325290889085906004016156e6565b600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b505050505b50505b6001016130ee565b6132bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6132c583836138c1565b825260408201526132d682846138c1565b6020830152606082015292915050565b6132ef81613a05565b61332757806040517f644cc258000000000000000000000000000000000000000000000000000000008152600401610bc791906156ff565b50565b60606112b8838360405180606001604052806027815260200161589660279139613a35565b600081831061335e57816112b8565b5090919050565b60606000825167ffffffffffffffff81111561338357613383614412565b6040519080825280602002602001820160405280156133ac578160200160208202803683370190505b5090506000808451116133c05760006133c6565b83516001015b855160010101905060008167ffffffffffffffff8111156133e9576133e9614412565b60405190808252806020026020018201604052801561341c57816020015b60608152602001906001900390816134075790505b5090506000613441604080516002815233602082015230818301526060810190915290565b82828151811061345357613453614b8d565b602002602001018190525060005b87518110156134b157818060010192505087818151811061348457613484614b8d565b602002602001015183838151811061349e5761349e614b8d565b6020908102919091010152600101613461565b5085511561365e578080600101915050838282815181106134d4576134d4614b8d565b602002602001018190525060005b865181101561365c5761359387828151811061350057613500614b8d565b60200260200101516000015161357061353d8a858151811061352457613524614b8d565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b89848151811061358257613582614b8d565b602002602001015160400151613aad565b6135cc576040517f52bf984800000000000000000000000000000000000000000000000000000000815260048101829052602401610bc7565b8681815181106135de576135de614b8d565b6020026020010151600001516001600160a01b031685828151811061360557613605614b8d565b602002602001018181525050818060010192505086818151811061362b5761362b614b8d565b60200260200101516020015183838151811061364957613649614b8d565b60209081029190910101526001016134e2565b505b5095945050505050565b6000604e821061368a57821561368057600019613683565b60005b905061034f565b50600a81900a82810290838183816136a4576136a4615695565b04146136b257600019612a1a565b5092915050565b600a81900a6136c88184615712565b9050604e821061034f5782156136e8576136e382600a61580d565b6112b8565b50600092915050565b6000604e821061371557821561370857600161370b565b60005b60ff16905061034f565b600a82900a80848161372957613729615695565b04915080820284146136b2575060010192915050565b6000604e8210156136e85781600a0a838161375c5761375c615695565b046112b8565b600080613770868686613b04565b9050600183600281111561378657613786615819565b1480156137a357506000848061379e5761379e615695565b868809115b156137b6576137b3600182614d70565b90505b95945050505050565b6000613814826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c109092919063ffffffff16565b90508051600014806138355750808060200190518101906138359190615848565b612e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bc7565b60008060006138e4856060015160018760400151612a049092919063ffffffff16565b9050600085604001519050846040015182111561391857604085015160608701519092506139159083906000613c1f565b90505b600085600001516060015186602001518151811061393857613938614b8d565b60200260200101516020015160ff169050600061396182600186612a229092919063ffffffff16565b905061396f84836000612a22565b9550858111156139b057600080613989888403858361297f565b60608b015190915061399e9082906001613c1f565b91506139ac90508185614d5d565b9350505b60008860000151606001518960200151815181106139d0576139d0614b8d565b60200260200101516020015160ff1690506139f781600086612a229092919063ffffffff16565b955050505050509250929050565b6000600882511015613a1957506000919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b6060600080856001600160a01b031685604051613a52919061586a565b600060405180830381855af49150503d8060008114613a8d576040519150601f19603f3d011682016040523d82523d6000602084013e613a92565b606091505b5091509150613aa386838387613c35565b9695505050505050565b6000806000613abc8585613cc8565b90925090506000816004811115613ad557613ad5615819565b148015613af35750856001600160a01b0316826001600160a01b0316145b80613aa35750613aa3868686613d0d565b6000808060001985870985870292508281108382030391505080600003613b3e57838281613b3457613b34615695565b04925050506112b8565b808411613ba7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610bc7565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060612a1a8484600085613e3f565b6000612a1a84670de0b6b3a76400008585613762565b60608315613cbe578251600003613cb7576001600160a01b0385163b613cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bc7565b5081612a1a565b612a1a8383613f4b565b6000808251604103613cfe5760208301516040840151606085015160001a613cf287828585613f8f565b94509450505050613d06565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401613d3792919061587c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051613da2919061586a565b600060405180830381855afa9150503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150818015613df657506020815110155b8015613aa3575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090613e349083016020908101908401615135565b149695505050505050565b606082471015613ed1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bc7565b600080866001600160a01b03168587604051613eed919061586a565b60006040518083038185875af1925050503d8060008114613f2a576040519150601f19603f3d011682016040523d82523d6000602084013e613f2f565b606091505b5091509150613f4087838387613c35565b979650505050505050565b815115613f5b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc791906156ff565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613fc6575060009050600361404a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561401a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140435760006001925092505061404a565b9150600090505b94509492505050565b6040518060800160405280614066614081565b81526020016000815260200160008152602001606081525090565b6040518060a0016040528060006001600160a01b031681526020016140d2604051806060016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b815260606020820181905260408201819052600091015290565b6040518060e001604052806140ff614081565b81526020016000815260200160008152602001600081526020016060815260200160008152602001606081525090565b60006020828403121561414157600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112b857600080fd5b600060a0828403121561418357600080fd5b50919050565b60006020828403121561419b57600080fd5b813567ffffffffffffffff8111156141b257600080fd5b612a1a84828501614171565b60008083601f8401126141d057600080fd5b50813567ffffffffffffffff8111156141e857600080fd5b6020830191508360208260051b8501011115613d0657600080fd5b6000806020838503121561421657600080fd5b823567ffffffffffffffff81111561422d57600080fd5b614239858286016141be565b90969095509350505050565b60006020828403121561425757600080fd5b5035919050565b6001600160a01b038116811461332757600080fd5b803561427e8161425e565b919050565b60008060008060006080868803121561429b57600080fd5b85356142a68161425e565b945060208601356142b68161425e565b935060408601359250606086013567ffffffffffffffff808211156142da57600080fd5b818801915088601f8301126142ee57600080fd5b8135818111156142fd57600080fd5b89602082850101111561430f57600080fd5b9699959850939650602001949392505050565b60006020828403121561433457600080fd5b81356112b88161425e565b60008060006040848603121561435457600080fd5b833567ffffffffffffffff8082111561436c57600080fd5b61437887838801614171565b9450602086013591508082111561438e57600080fd5b5061439b868287016141be565b9497909650939450505050565b6000806000806000608086880312156143c057600080fd5b85356143cb8161425e565b94506020860135935060408601359250606086013567ffffffffffffffff8111156143f557600080fd5b614401888289016141be565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561446457614464614412565b60405290565b60405160a0810167ffffffffffffffff8111828210171561446457614464614412565b6040805190810167ffffffffffffffff8111828210171561446457614464614412565b604051601f8201601f1916810167ffffffffffffffff811182821017156144d9576144d9614412565b604052919050565b600082601f8301126144f257600080fd5b813567ffffffffffffffff81111561450c5761450c614412565b61451f6020601f19601f840116016144b0565b81815284602083860101111561453457600080fd5b816020850160208301376000918101602001919091529392505050565b60006060828403121561456357600080fd5b61456b614441565b905081356145788161425e565b815260208201356145888161425e565b6020820152604082013567ffffffffffffffff8111156145a757600080fd5b6145b3848285016144e1565b60408301525092915050565b600067ffffffffffffffff8211156145d9576145d9614412565b5060051b60200190565b60ff8116811461332757600080fd5b60006060828403121561460457600080fd5b61460c614441565b905081356146198161425e565b81526020820135614629816145e3565b806020830152506040820135604082015292915050565b600082601f83011261465157600080fd5b81356020614666614661836145bf565b6144b0565b80838252602082019150606060206060860288010194508785111561468a57600080fd5b602087015b858110156146ae576146a189826145f2565b845292840192810161468f565b5090979650505050505050565b600060a082840312156146cd57600080fd5b6146d561446a565b90506146e082614273565b8152602082013567ffffffffffffffff808211156146fd57600080fd5b61470985838601614551565b6020840152604084013591508082111561472257600080fd5b61472e85838601614640565b6040840152606084013591508082111561474757600080fd5b5061475484828501614640565b6060830152506080820135608082015292915050565b600060c0828403121561418357600080fd5b600061478a614661846145bf565b8381529050602080820190600585811b8501878111156147a957600080fd5b855b818110156148a257803567ffffffffffffffff808211156147cc5760008081fd5b908801906060828c0312156147e15760008081fd5b6147e9614441565b82356147f48161425e565b815282870135828111156148085760008081fd5b8301601f81018d1361481a5760008081fd5b8035614828614661826145bf565b81815290881b8201890190898101908f8311156148455760008081fd5b928a01925b828410156148635783358252928a0192908a019061484a565b848b0152506040915050838101358381111561487f5760008081fd5b61488b8e8287016144e1565b9183019190915250875250509383019383016147ab565b50505050509392505050565b600082601f8301126148bf57600080fd5b6112b88383356020850161477c565b600080600080600061014086880312156148e757600080fd5b853567ffffffffffffffff808211156148ff57600080fd5b61490b89838a016146bb565b9650602088013591508082111561492157600080fd5b61492d89838a016146bb565b955061493c8960408a0161476a565b945061010088013591508082111561495357600080fd5b61495f89838a016148ae565b935061012088013591508082111561497657600080fd5b50614983888289016148ae565b9150509295509295909350565b6000806000604084860312156149a557600080fd5b833567ffffffffffffffff808211156149bd57600080fd5b6143788783880161476a565b60005b838110156149e45781810151838201526020016149cc565b50506000910152565b60008151808452614a058160208601602086016149c9565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614a8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614a7c8583516149ed565b94509285019290850190600101614a42565b5092979650505050505050565b600080600060608486031215614ab057600080fd5b8335614abb8161425e565b92506020840135614acb8161425e565b929592945050506040919091013590565b60008060408385031215614aef57600080fd5b8235614afa8161425e565b946020939093013593505050565b600060208284031215614b1a57600080fd5b813567ffffffffffffffff811115614b3157600080fd5b8201608081850312156112b857600080fd5b6000808335601e19843603018112614b5a57600080fd5b83018035915067ffffffffffffffff821115614b7557600080fd5b6020019150600581901b3603821315613d0657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614bf057600080fd5b9190910192915050565b600060808236031215614c0c57600080fd5b6040516080810167ffffffffffffffff8282108183111715614c3057614c30614412565b816040528435915080821115614c4557600080fd5b614c51368387016146bb565b835260208501356020840152604085013560408401526060850135915080821115614c7b57600080fd5b50614c88368286016148ae565b60608301525092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112614bf057600080fd5b6000808335601e19843603018112614cdf57600080fd5b83018035915067ffffffffffffffff821115614cfa57600080fd5b6020019150606081023603821315613d0657600080fd5b600060208284031215614d2357600080fd5b81356112b8816145e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561034f5761034f614d2e565b8082018082111561034f5761034f614d2e565b60008151808452602080850194506020840160005b83811015614dd657815180516001600160a01b031688528381015160ff16848901526040908101519088015260609096019590820190600101614d98565b509495945050505050565b60006001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e0850152614e2f6101008501826149ed565b905060408301518482036040860152614e488282614d83565b91505060608301518482036060860152614e628282614d83565b915050608083015160808501528091505092915050565b60008151808452602080850194506020840160005b83811015614dd657815187529582019590820190600101614e8e565b60006001600160a01b03808716835260206080818501528651608080860152614ed7610100860182614de1565b90508188015160a086015260408089015160c08701526060808a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808885030160e08901528381518086528686019150868160051b870101878401935060005b82811015614f9257601f1988830301845284518a815116835289810151878b850152614f6688850182614e79565b91890151848303858b0152919050614f7e81836149ed565b968b0196958b019593505050600101614f38565b5080995050505050505050505083604083015282606083015295945050505050565b6000808335601e19843603018112614fcb57600080fd5b83018035915067ffffffffffffffff821115614fe657600080fd5b602001915036819003821315613d0657600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261505f60a083018486614ffb565b98975050505050505050565b6000615079614661846145bf565b80848252602080830192508560051b85013681111561509757600080fd5b855b8181101561512957803567ffffffffffffffff808211156150ba5760008081fd5b8189019150604082360312156150d05760008081fd5b6150d861448d565b8235828111156150e85760008081fd5b6150f436828601614551565b82525085830135828111156151095760008081fd5b615115368286016148ae565b828801525087525050938201938201615099565b50919695505050505050565b60006020828403121561514757600080fd5b5051919050565b600061034f36836146bb565b600081356151678161425e565b6001600160a01b0390811684526020830135906151838261425e565b166020840152604082013536839003601e190181126151a157600080fd5b820160208101903567ffffffffffffffff8111156151be57600080fd5b8036038213156151cd57600080fd5b606060408601526137b6606086018284614ffb565b6000808335601e198436030181126151f957600080fd5b830160208101925035905067ffffffffffffffff81111561521957600080fd5b606081023603821315613d0657600080fd5b8183526000602080850194508260005b85811015614dd657813561524e8161425e565b6001600160a01b0316875281830135615266816145e3565b60ff1687840152604082810135908801526060968701969091019060010161523b565b60006001600160a01b0380861683528460208401526060604084015283356152b08161425e565b1660608301526020830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa10181126152ec57600080fd5b60a06080840152615303610100840185830161515a565b905061531260408501856151e2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0808685030160a087015261534884838561522b565b935061535760608801886151e2565b93509150808685030160c08701525061537183838361522b565b92505050608084013560e084015280915050949350505050565b60006020828403121561539d57600080fd5b81516112b8816145e3565b60006101206001600160a01b03871683528060208401526153cb81840187614de1565b905082810360408401526153df8186614de1565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614bf057600080fd5b600061034f3683614551565b60006060828403121561547757600080fd5b6112b883836145f2565b6001600160a01b03841681528260208201526060604082015260006137b66060830184614de1565b6001600160a01b0385168152836020820152606060408201526000613aa3606083018486614ffb565b8284823760008382016000815283516154ef8183602088016149c9565b0195945050505050565b60006112b836848461477c565b6020815260006112b86020830184614de1565b60008282518085526020808601955060208260051b8401016020860160005b848110156146ae57601f19868403018952615554838351614e79565b98840198925090830190600101615538565b6001600160a01b038716815285602082015260c06040820152600061558e60c08301876149ed565b85606084015282810360808401526155a68186615519565b905082810360a08401526155ba8185614e79565b9998505050505050505050565b600082601f8301126155d857600080fd5b815160206155e8614661836145bf565b8083825260208201915060208460051b87010193508684111561560a57600080fd5b602086015b84811015615626578051835291830191830161560f565b509695505050505050565b6000806040838503121561564457600080fd5b825167ffffffffffffffff8082111561565c57600080fd5b615668868387016155c7565b9350602085015191508082111561567e57600080fd5b5061568b858286016155c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001600160a01b0383168152604060208201526000612a1a6040830184615519565b828152604060208201526000612a1a6040830184614e79565b6020815260006112b860208301846149ed565b808202811582820484141761034f5761034f614d2e565b600181815b8085111561576457816000190482111561574a5761574a614d2e565b8085161561575757918102915b93841c939080029061572e565b509250929050565b60008261577b5750600161034f565b816157885750600061034f565b816001811461579e57600281146157a8576157c4565b600191505061034f565b60ff8411156157b9576157b9614d2e565b50506001821b61034f565b5060208310610133831016604e8410600b84101617156157e7575081810a61034f565b6157f18383615729565b806000190482111561580557615805614d2e565b029392505050565b60006112b8838361576c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561585a57600080fd5b815180151581146112b857600080fd5b60008251614bf08184602087016149c9565b828152604060208201526000612a1a60408301846149ed56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564