0 txs
0 calls
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)
quote2
viewfunction quote2(tuple quoteConfig) view returns (bool, bytes32, bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
vaultBalance2
viewfunction vaultBalance2(address owner, address token, bytes32 vaultId) view returns (bytes32)
addOrder3
nonpayablefunction addOrder3(tuple orderConfig, tuple[] post) returns (bool)
clear3
nonpayablefunction clear3(tuple aliceOrder, tuple bobOrder, tuple clearConfig, tuple[] aliceSignedContext, tuple[] bobSignedContext)
deposit3
nonpayablefunction deposit3(address token, bytes32 vaultId, bytes32 depositAmount, tuple[] post)
entask2
nonpayablefunction entask2(tuple[] post)
flashLoan
nonpayablefunction flashLoan(address receiver, address token, uint256 amount, bytes data) returns (bool)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removeOrder3
nonpayablefunction removeOrder3(tuple order, tuple[] post) returns (bool stateChanged)
takeOrders3
nonpayablefunction takeOrders3(tuple config) returns (bytes32 totalTakerInput, bytes32 totalTakerOutput)
withdraw3
nonpayablefunction withdraw3(address token, bytes32 vaultId, bytes32 targetAmount, tuple[] post)
events
AddOrderV3
event AddOrderV3(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, bytes32 vaultId)[] validInputs, (address token, bytes32 vaultId)[] validOutputs, bytes32 nonce) order)
AfterClearV2
event AfterClearV2(address sender, (bytes32 aliceOutput, bytes32 bobOutput, bytes32 aliceInput, bytes32 bobInput) clearStateChange)
ClearV3
event ClearV3(address sender, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, bytes32 vaultId)[] validInputs, (address token, bytes32 vaultId)[] validOutputs, bytes32 nonce) alice, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, bytes32 vaultId)[] validInputs, (address token, bytes32 vaultId)[] validOutputs, bytes32 nonce) bob, (uint256 aliceInputIOIndex, uint256 aliceOutputIOIndex, uint256 bobInputIOIndex, uint256 bobOutputIOIndex, bytes32 aliceBountyVaultId, bytes32 bobBountyVaultId) clearConfig)
ContextV2
event ContextV2(address sender, bytes32[][] context)
DepositV2
event DepositV2(address sender, address token, bytes32 vaultId, uint256 depositAmountUint256)
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)
RemoveOrderV3
event RemoveOrderV3(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, bytes32 vaultId)[] validInputs, (address token, bytes32 vaultId)[] validOutputs, bytes32 nonce) order)
TakeOrderV3
event TakeOrderV3(address sender, ((address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, bytes32 vaultId)[] validInputs, (address token, bytes32 vaultId)[] validOutputs, bytes32 nonce) order, uint256 inputIOIndex, uint256 outputIOIndex, (address signer, bytes32[] context, bytes signature)[] signedContext) config, bytes32 input, bytes32 output)
WithdrawV2
event WithdrawV2(address sender, address token, bytes32 vaultId, bytes32 targetAmount, bytes32 withdrawAmount, uint256 withdrawAmountUint256)
errors
ClearZeroAmount
error ClearZeroAmount()
ExponentOverflow
error ExponentOverflow(int256 signedCoefficient, int256 exponent)
FlashLenderCallbackFailed
error FlashLenderCallbackFailed(bytes32 result)
InvalidSignature
error InvalidSignature(uint256 i)
MinimumInput
error MinimumInput(bytes32 minimumInput, bytes32 input)
MulDivOverflow
error MulDivOverflow(uint256 x, uint256 y, uint256 denominator)
NegativeBounty
error NegativeBounty()
NegativeFixedDecimalConversion
error NegativeFixedDecimalConversion(int256 signedCoefficient, int256 exponent)
NegativePull
error NegativePull()
NegativePush
error NegativePush()
NegativeVaultBalance
error NegativeVaultBalance(bytes32 vaultBalance)
NegativeVaultBalanceChange
error NegativeVaultBalanceChange(bytes32 amount)
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()
TokenDecimalsReadFailure
error TokenDecimalsReadFailure(address token, uint8 tofuOutcome)
TokenMismatch
error TokenMismatch()
TokenSelfTrade
error TokenSelfTrade()
UnsupportedCalculateOutputs
error UnsupportedCalculateOutputs(uint256 outputs)
ZeroDepositAmount
error ZeroDepositAmount(address sender, address token, bytes32 vaultId)
ZeroMaximumInput
error ZeroMaximumInput()
ZeroWithdrawTargetAmount
error ZeroWithdrawTargetAmount(address sender, address token, bytes32 vaultId)
creation bytecode
0x6080604052348015600f57600080fd5b506001600055615ef5806100246000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063613255ab11610097578063d0f7a86211610066578063d0f7a86214610258578063d7e442ec14610280578063d9d98ce414610293578063fa501182146102a957600080fd5b8063613255ab146101e25780637921a962146101f55780639235084d14610208578063ac9650d81461023857600080fd5b806323a455b5116100d357806323a455b51461014a5780632cb77e9f1461015d57806341d1514f146101815780635cffe9de146101cf57600080fd5b806301ffc9a7146100fa5780630cb49ba3146101225780631f69cb7514610137575b600080fd5b61010d61010836600461477f565b6102bc565b60405190151581526020015b60405180910390f35b610135610130366004614826565b610355565b005b61010d6101453660046148a8565b610505565b61010d610158366004614923565b61064b565b61010d61016b36600461495c565b6000908152600160208190526040909120541490565b6101c161018f366004614975565b6001600160a01b0392831660009081526003602090815260408083209490951682529283528381209181529152205490565b604051908152602001610119565b61010d6101dd3660046149b6565b610944565b6101c16101f0366004614a55565b610a7c565b610135610203366004614826565b610b00565b61021b610216366004614a72565b610c33565b604080519315158452602084019290925290820152606001610119565b61024b610246366004614aad565b610d88565b6040516101199190614b3f565b61026b610266366004614bc1565b610e70565b60408051928352602083019190915201610119565b61013561028e366004614aad565b6117d8565b6101c16102a1366004614bf6565b600092915050565b6101356102b736600461508e565b611827565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe414309100000000000000000000000000000000000000000000000000000000148061034f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61035d611d3c565b610368836000611d95565b6103ba576040517ee8e9340000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0386166024820152604481018590526064015b60405180910390fd5b3360009081526003602090815260408083206001600160a01b03891684528252808320878452909152812054906103f18583611dd0565b9050600080610402338a8a86611ded565b915091506000806104138b86611ef5565b604080513381526001600160a01b038f1660208201529081018d9052606081018c90526080810188905260a0810183905291935091507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b89060c00160405180910390a186156104ee5760408051600681526001600160a01b038d1660208201528082018c9052606081018690526080810185905260a081018b905260ff831660c082015260e081019091526104ee906104df905b60408051600181526020810192909252818101905290565b6104e9898b615150565b611fdd565b5050505050506104fe6001600055565b5050505050565b600061050f611d3c565b61051c6020850185614a55565b6001600160a01b0316336001600160a01b03161461058757336105426020860186614a55565b6040517f4702b9140000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044016103b1565b600061059a6105958661521a565b6121bf565b600081815260016020526040902054909150600019016106395760008181526001602081905260408083209290925590519092507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906105ff9033908490899061537e565b60405180910390a16040805160028152602081018390523381830152606081019091526106399061062f906104c7565b6104e98587615150565b506106446001600055565b9392505050565b6000610655611d3c565b6106626020850185615462565b905060000361069d576040517f6c44ef8f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106aa6040850185615462565b90506000036106e5576040517f540e5f0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a081019091523381526000906020810161070487806154ac565b61070d906154cc565b81526020018680602001906107229190615462565b808060200260200160405190810160405280939291908181526020016000905b8282101561076e5761075f604083028601368190038101906154d8565b81526020019060010190610742565b50505091835250506020016107866040880188615462565b808060200260200160405190810160405280939291908181526020016000905b828210156107d2576107c3604083028601368190038101906154d8565b815260200190600101906107a6565b505050505081526020018660600135815250905060006107f1826121bf565b6000818152600160205260409020549091501580156109365760008281526001602081905260409182902055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f9161085091859087906155d1565b60405180910390a1600061086760a08901896155f9565b90501115610904576108b961087f60a08901896155f9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121ef92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836108eb60a08b018b6155f9565b6040516108fb9493929190615640565b60405180910390a15b6040805160028152602081018490523381830152606081019091526109369061092c906104c7565b6104e98789615150565b925050506106446001600055565b600061095a6001600160a01b0386168786612233565b6040517f23e30c8b0000000000000000000000000000000000000000000000000000000081526000906001600160a01b038816906323e30c8b906109ac9033908a908a9087908b908b90600401615669565b6020604051808303816000875af11580156109cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ef91906156ae565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98114610a4d576040517f5b62c548000000000000000000000000000000000000000000000000000000008152600481018290526024016103b1565b610a6f8730610a5d6000896156dd565b6001600160a01b038a169291906122cc565b5060019695505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f91906156ae565b610b08611d3c565b610b13836000611d95565b610b61576040517f6dde9c300000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0386166024820152604481018590526064016103b1565b600080610b6e8786612323565b604080513381526001600160a01b038b1660208201529081018990526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a1600080610bd2338a8a8a61240e565b90925090508415610c255760408051600581526001600160a01b038b1660208201528082018a9052606081018490526080810183905260ff851660a082015260c08101909152610c259061092c906104c7565b505050506104fe6001600055565b6000808080610c4e610c4586806156f0565b6105959061521a565b60008181526001602081905260409091205491925014610c78575060009250829150819050610d81565b610c8285806156f0565b610c90906060810190615462565b8660400135818110610ca457610ca4615724565b610cba9260206040909202019081019150614a55565b6001600160a01b0316610ccd86806156f0565b610cdb906040810190615462565b8760200135818110610cef57610cef615724565b610d059260206040909202019081019150614a55565b6001600160a01b031603610d2c57604051631cd2f1c760e21b815260040160405180910390fd5b6000610d6a610d3b87806156f0565b610d449061521a565b6020880135604089013533610d5c60608c018c61573a565b610d6591615784565b612490565b905060018160400151826060015194509450945050505b9193909250565b6040805160008152602081019091526060908267ffffffffffffffff811115610db357610db3614c22565b604051908082528060200260200182016040528015610de657816020015b6060815260200190600190039081610dd15790505b50915060005b83811015610e6857610e4330868684818110610e0a57610e0a615724565b9050602002810190610e1c91906155f9565b85604051602001610e2f93929190615791565b604051602081830303815290604052612b7a565b838281518110610e5557610e55615724565b6020908102919091010152600101610dec565b505092915050565b600080610e7b611d3c565b610e88606084018461573a565b9050600003610ec3576040517f9c95219f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ecb61469d565b610ed36146cb565b60606000610ee38783018861573a565b6040805160206001939093018302810190915293508801359150610f0a9050816000611d95565b610f40576040517fc2ee700900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b610f50606089018961573a565b905081108015610f665750610f66826000611d95565b1561142557610f78606089018961573a565b82818110610f8857610f88615724565b9050602002810190610f9a91906157b8565b610fa3906157ec565b80519095509350610fb7606089018961573a565b6000818110610fc857610fc8615724565b9050602002810190610fda91906157b8565b610fe490806156f0565b610ff2906040810190615462565b610fff60608b018b61573a565b600081811061101057611010615724565b905060200281019061102291906157b8565b6020013581811061103557611035615724565b61104b9260206040909202019081019150614a55565b6001600160a01b0316846040015186602001518151811061106e5761106e615724565b6020026020010151600001516001600160a01b03161415806111675750611098606089018961573a565b60008181106110a9576110a9615724565b90506020028101906110bb91906157b8565b6110c590806156f0565b6110d3906060810190615462565b6110e060608b018b61573a565b60008181106110f1576110f1615724565b905060200281019061110391906157b8565b6040013581811061111657611116615724565b61112c9260206040909202019081019150614a55565b6001600160a01b0316846060015186604001518151811061114f5761114f615724565b6020026020010151600001516001600160a01b031614155b1561119e576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83606001518560400151815181106111b8576111b8615724565b6020026020010151600001516001600160a01b031684604001518660200151815181106111e7576111e7615724565b6020026020010151600001516001600160a01b03160361121a57604051631cd2f1c760e21b815260040160405180910390fd5b6000611225856121bf565b60008181526001602052604090205490915061128b578451604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a161141c565b60006112a68688602001518960400151338b60600151612490565b60608101519091506112bc9060408c0135611d95565b15611312578551604080513381526001600160a01b03909216602083015281018390527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a161141a565b60408101516001600160e01b031661136c578551604080513381526001600160a01b03909216602083015281018390527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001611305565b604081015160009061137e9086611dd0565b90506000611399828460600151612b9f90919063ffffffff16565b90506113a58683612bf1565b95506113b18a82612c22565b99506113bd8b83612c22565b9a506113ca818385612c53565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338a84846040516113ff94939291906158b7565b60405180910390a15050845160010180865260200285018190525b505b50600101610f43565b506114339050858735612e23565b15611474576040517fe609bc4900000000000000000000000000000000000000000000000000000000815286356004820152602481018690526044016103b1565b61151e611484606088018861573a565b600081811061149557611495615724565b90506020028101906114a791906157b8565b6114b190806156f0565b6114bf906060810190615462565b6114cc60608a018a61573a565b60008181106114dd576114dd615724565b90506020028101906114ef91906157b8565b6040013581811061150257611502615724565b6115189260206040909202019081019150614a55565b86611ef5565b506000905061153060808801886155f9565b905011156116e3573363691f9ed761154b606089018961573a565b600081811061155c5761155c615724565b905060200281019061156e91906157b8565b61157890806156f0565b611586906060810190615462565b61159360608b018b61573a565b60008181106115a4576115a4615724565b90506020028101906115b691906157b8565b604001358181106115c9576115c9615724565b6115df9260206040909202019081019150614a55565b6115ec60608a018a61573a565b60008181106115fd576115fd615724565b905060200281019061160f91906157b8565b61161990806156f0565b611627906040810190615462565b61163460608c018c61573a565b600081811061164557611645615724565b905060200281019061165791906157b8565b6020013581811061166a5761166a615724565b6116809260206040909202019081019150614a55565b888861168f60808d018d6155f9565b6040518763ffffffff1660e01b81526004016116b096959493929190615669565b600060405180830381600087803b1580156116ca57600080fd5b505af11580156116de573d6000803e3d6000fd5b505050505b61178d6116f3606088018861573a565b600081811061170457611704615724565b905060200281019061171691906157b8565b61172090806156f0565b61172e906040810190615462565b61173b60608a018a61573a565b600081811061174c5761174c615724565b905060200281019061175e91906157b8565b6020013581811061177157611771615724565b6117879260206040909202019081019150614a55565b85612323565b505060005b81518110156117c5576117bd8282815181106117b0576117b0615724565b6020026020010151612e5e565b600101611792565b505050506117d36001600055565b915091565b6117e0611d3c565b604080516000808252602082019092526118199161180e565b60608152602001906001900390816117f95790505b506104e98385615150565b6118236001600055565b5050565b61182f611d3c565b835185516001600160a01b03918216911603611877576040517f2a63c7cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836040015183604001358151811061189157611891615724565b6020026020010151600001516001600160a01b031685606001518460200135815181106118c0576118c0615724565b6020026020010151600001516001600160a01b031614158061193c57506040850151805184359081106118f5576118f5615724565b6020026020010151600001516001600160a01b0316846060015184606001358151811061192457611924615724565b6020026020010151600001516001600160a01b031614155b15611973576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846060015183602001358151811061198d5761198d615724565b6020026020010151600001516001600160a01b031685604001518460000135815181106119bc576119bc615724565b6020026020010151600001516001600160a01b0316036119ef57604051631cd2f1c760e21b815260040160405180910390fd5b6000600160006119fe886121bf565b81526020019081526020016000205403611a70577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f3338660000151611a42886121bf565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611d32565b600060016000611a7f876121bf565b81526020019081526020016000205403611ac3577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f3338560000151611a42876121bf565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e3933868686604051611af894939291906159c1565b60405180910390a16000611b1b8685600001358660200135886000015186612490565b90506000611b3886866040013587606001358a6000015188612490565b90506000611b4683836130b9565b9050611b5b8160400151826000015185612c53565b611b6e8160600151826020015184612c53565b60608101518151600091611b829190612bf1565b90506000611ba183604001518460200151612bf190919063ffffffff16565b9050611bae826000612e23565b80611bbf5750611bbf816000612e23565b15611bf6576040517f0d86822100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2b338b606001518a6020013581518110611c1457611c14615724565b6020026020010151600001518a608001358561240e565b5050611c62338a606001518a6060013581518110611c4b57611c4b615724565b6020026020010151600001518a60a001358461240e565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611ccb83612e5e565b611cd482612e5e565b80516001600160e01b0316158015611cf7575060208101516001600160e01b0316155b15611d2e576040517f21badf1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505b6104fe6001600055565b600260005403611d8e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103b1565b6002600055565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611dc484848484613108565b12979650505050505050565b6000611ddc8383612e23565b611de65781610644565b5090919050565b600080611dfa8382612e23565b15611e34576040517f793a8f55000000000000000000000000000000000000000000000000000000008152600481018490526024016103b1565b6001600160a01b038087166000908152600360209081526040808320938916835292815282822087835290529081205490611e6f8286612bf1565b9050611e7c816000612e23565b15611eb6576040517fc5e12af5000000000000000000000000000000000000000000000000000000008152600481018290526024016103b1565b6001600160a01b038089166000908152600360209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b600080600080611f066002876131e3565b90925090506001826003811115611f1f57611f1f615a3e565b14158015611f3f57506000826003811115611f3c57611f3c615a3e565b14155b15611f6157858260405163ee07877f60e01b81526004016103b1929190615a54565b611f6c856000612e23565b15611fa3576040517f5a2ce34600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611fb087846132af565b90925090508115611fcf57611fcf6001600160a01b0389163384612233565b5093509150505b9250929050565b3360008181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156121b55786818151811061204557612045615724565b6020026020010151935060008460000151604001515111156121ad576000808560000151600001516001600160a01b031663d04dfe236040518060e001604052808960000151602001516001600160a01b031681526020018a81526020018960000151604001518152602001600081526020016120c68e8b602001516132dc565b8152602001888152602001878152506040518263ffffffff1660e01b81526004016120f19190615ae9565b600060405180830381865afa15801561210e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121369190810190615be5565b80519193509150156121aa5785516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490612177908b908590600401615ca1565b600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50505b60010161202a565b5050505050505050565b6000816040516020016121d29190615cba565b604051602081830303815290604052805190602001209050919050565b6121f8816135e2565b61223057806040517f644cc2580000000000000000000000000000000000000000000000000000000081526004016103b19190615ccd565b50565b6040516001600160a01b0383166024820152604481018290526122c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613612565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261231d9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612278565b50505050565b6000806000806123346002876131e3565b9092509050600182600381111561234d5761234d615a3e565b1415801561236d5750600082600381111561236a5761236a615a3e565b14155b1561238f57858260405163ee07877f60e01b81526004016103b1929190615a54565b61239a856000612e23565b156123d1576040517fbabbeb0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806123de87846132af565b91509150806123f3576123f082615ce0565b91505b8115611fcf57611fcf6001600160a01b0389163330856122cc565b60008061241b8382612e23565b15612455576040517f793a8f55000000000000000000000000000000000000000000000000000000008152600481018490526024016103b1565b6001600160a01b038087166000908152600360209081526040808320938916835292815282822087835290529081205490611e6f8286612c22565b612498614736565b60006124a3876121bf565b60408051600480825260a08201909252919250606091600091816020015b60608152602001906001900390816124c15790505089516040805160038152602081018790526001600160a01b0392831681830152918916606083015260808201905290915081600180038151811061251c5761251c615724565b602002602001018190525060008061255660028c604001518c8151811061254557612545615724565b6020026020010151600001516136fa565b9092509050600182600381111561256f5761256f615a3e565b1415801561258f5750600082600381111561258c5761258c615a3e565b14155b156125d2578a604001518a815181106125aa576125aa615724565b6020026020010151600001518260405163ee07877f60e01b81526004016103b1929190615a54565b8a516001600160a01b0316600090815260036020526040808220908d015180518391908e90811061260557612605615724565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d604001518d8151811061264957612649615724565b60200260200101516020015181526020019081526020016000205490506126f78c604001518c8151811061267f5761267f615724565b6020026020010151600001516001600160a01b031660001b8360ff1660001b8e604001518e815181106126b4576126b4615724565b602002602001015160200151846000801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b8460016003038151811061270d5761270d615724565b602002602001018190525050505060008061273960028c606001518b8151811061254557612545615724565b9092509050600182600381111561275257612752615a3e565b141580156127725750600082600381111561276f5761276f615a3e565b14155b1561278d578a6060015189815181106125aa576125aa615724565b8a516001600160a01b0316600090815260036020526040812060608d015180518391908d9081106127c0576127c0615724565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d606001518c8151811061280457612804615724565b602002602001015160200151815260200190815260200160002054905061286f8c606001518b8151811061283a5761283a615724565b6020026020010151600001516001600160a01b031660001b8360ff1660001b8e606001518d815181106126b4576126b4615724565b8460016004038151811061288557612885615724565b602002602001018190525050505061289d81866132dc565b915050600088600001516001600160a01b031690506000808a60200151600001516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b03168152602001612902873060009182526020526040902090565b81526020018e6020015160400151815260200160008152602001878152602001600067ffffffffffffffff81111561293c5761293c614c22565b604051908082528060200260200182016040528015612965578160200160208202803683370190505b5081526020016000604051908082528060200260200182016040528015612996578160200160208202803683370190505b508152506040518263ffffffff1660e01b81526004016129b69190615ae9565b600060405180830381865afa1580156129d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129fb9190810190615be5565b91509150600282511015612a405781516040517f3eee39540000000000000000000000000000000000000000000000000000000081526004016103b191815260200190565b6020828101516040808501518e516001600160a01b03166000908152600390945290832060608f01518051939492938391908f908110612a8257612a82615724565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008f606001518e81518110612ac657612ac6615724565b6020026020010151602001518152602001908152602001600020549050612af68183611dd090919063ffffffff16565b60408051600281526020810183905280820186905260608101909152909250905086600281518110612b2a57612b2a615724565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525097505050505050505095945050505050565b60606106448383604051806060016040528060278152602001615ece6027913961385c565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612bd0868686866138d4565b91509150600080612be184846139fa565b509b9a5050505050505050505050565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612bd086868686613aa0565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612bd086868686613acb565b828160800151600381518110612c6b57612c6b615724565b6020026020010151600481518110612c8557612c85615724565b602002602001018181525050818160800151600481518110612ca957612ca9615724565b6020026020010151600481518110612cc357612cc3615724565b602002602001018181525050612d568160000151600001518260800151600381518110612cf257612cf2615724565b6020026020010151600081518110612d0c57612d0c615724565b602002602001015160001c8360800151600381518110612d2e57612d2e615724565b6020026020010151600281518110612d4857612d48615724565b60200260200101518661240e565b5050612ddf8160000151600001518260800151600481518110612d7b57612d7b615724565b6020026020010151600081518110612d9557612d95615724565b602002602001015160001c8360800151600481518110612db757612db7615724565b6020026020010151600281518110612dd157612dd1615724565b602002602001015185611ded565b50507f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338260800151604051612e16929190615cfa565b60405180910390a1505050565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612e5284848484613108565b13979650505050505050565b60c08101515115612edd578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612eaa929091600401615ca1565b600060405180830381600087803b158015612ec457600080fd5b505af1158015612ed8573d6000803e3d6000fd5b505050505b600080826000015160200151600001516001600160a01b031663d04dfe236040518060e00160405280866000015160200151602001516001600160a01b03168152602001612f398760a001513060009182526020526040902090565b81526020018660000151602001516040015181526020016001815260200186608001518152602001600067ffffffffffffffff811115612f7b57612f7b614c22565b604051908082528060200260200182016040528015612fa4578160200160208202803683370190505b5081526020016000604051908082528060200260200182016040528015612fd5578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612ff59190615ae9565b600060405180830381865afa158015613012573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261303a9190810190615be5565b80519193509150156122c7578251602090810151015160a084015160405163012c676d60e21b81526001600160a01b03909216916304b19db491613082918590600401615ca1565b600060405180830381600087803b15801561309c57600080fd5b505af11580156130b0573d6000803e3d6000fd5b50505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091526130e78383613b9a565b825260408201526130f88284613b9a565b6020830152606082015292915050565b6000808515841517818712828612181785841417801561312e5786859250925050611eec565b50600085841315613143575092949193919260015b83860360008112604c821317801561317957821561316a5760008994509450505050611eec565b88600094509450505050611eec565b600a82900a8981028a82828161319157613191615d1c565b05146131bf5784156131ae5760008b965096505050505050611eec565b8a6000965096505050505050611eec565b84156131d4578896509450611eec9350505050565b9550879450611eec9350505050565b6000806000806131f386866136fa565b9092509050600082600381111561320c5761320c615a3e565b036132a4576040805180820182526001815260ff83811660208084019182526001600160a01b038a166000908152908b9052939093209151825493517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161761010093909116929092029190911790555b909590945092505050565b6000806001600160e01b038416601b0b60e085901d6132cf828287613c04565b9350935050509250929050565b60606000825167ffffffffffffffff8111156132fa576132fa614c22565b604051908082528060200260200182016040528015613323578160200160208202803683370190505b50905060008084511161333757600061333d565b83516001015b855160010101905060008167ffffffffffffffff81111561336057613360614c22565b60405190808252806020026020018201604052801561339357816020015b606081526020019060019003908161337e5790505b50905060006133b8604080516002815233602082015230818301526060810190915290565b8282815181106133ca576133ca615724565b602002602001018190525060005b87518110156134285781806001019250508781815181106133fb576133fb615724565b602002602001015183838151811061341557613415615724565b60209081029190910101526001016133d8565b508551156135d85780806001019150508382828151811061344b5761344b615724565b602002602001018190525060005b86518110156135d65761350a87828151811061347757613477615724565b6020026020010151600001516134e76134b48a858151811061349b5761349b615724565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b8984815181106134f9576134f9615724565b602002602001015160400151613d43565b613543576040517f52bf9848000000000000000000000000000000000000000000000000000000008152600481018290526024016103b1565b86818151811061355557613555615724565b6020026020010151600001516001600160a01b031660001b85828151811061357f5761357f615724565b60200260200101818152505081806001019250508681815181106135a5576135a5615724565b6020026020010151602001518383815181106135c3576135c3615724565b6020908102919091010152600101613459565b505b5095945050505050565b60006008825110156135f657506000919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b6000613667826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d9a9092919063ffffffff16565b90508051600014806136885750808060200190518101906136889190615d32565b6122c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103b1565b6001600160a01b03811660008181526020848152604080832081518083018352905460ff80821615158352610100909104168184015281518083018352600481527f313ce56700000000000000000000000000000000000000000000000000000000938101939093529051929384939192849283929161377991615d54565b600060405180830381855afa9150503d80600081146137b4576040519150601f19603f3d011682016040523d82523d6000602084013e6137b9565b606091505b50915091508115806137cd57508051602014155b156137e357505060200151600392509050611fd6565b6000818060200190518101906137f991906156ae565b905060ff8111156138165750505060200151600392509050611fd6565b8351819061382e57600096509450611fd69350505050565b846020015160ff168160ff1614613846576002613849565b60015b8560200151965096505050505050611fd6565b6060600080856001600160a01b0316856040516138799190615d54565b600060405180830381855af49150503d80600081146138b4576040519150601f19603f3d011682016040523d82523d6000602084013e6138b9565b606091505b50915091506138ca86838387613db1565b9695505050505050565b600080851584151780156138ef5760009250600091506139f0565b6138f98487615d66565b9150600061390688613e2a565b9050600061391387613e2a565b905060006139218383613e5a565b50905060006f0785ee10d5da46d900f436a000000000821115613957576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561397857670de0b6b3a7640000820491506012015b633b9aca0082111561399157633b9aca00820491506009015b6127108211156139a657612710820491506004015b81156139ba57600a820491506001016139a6565b6139c48187615d66565b95506139e68b8a6139e087876139db87600a615e6a565b613e78565b89613f62565b9097509550505050505b5094509492505050565b6000601b83900b831480613a58577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000840515613a3d57620186a0840593506005830192505b8384601b0b14613a5857600a84059350826001019250613a3d565b828360030b14613a855760405163d556b11160e01b815260048101859052602481018490526044016103b1565b6001600160e01b039390931660e09290921b91909117929050565b600080613aad8484614011565b9094509250613abe86868686613acb565b9150915094509492505050565b60008085158415178015613af95786600003613aed5784849250925050611eec565b86869250925050611eec565b613b038787614081565b9097509550613b128585614081565b909550935085841315613b26579395929492935b838603604c811115613b3f578787935093505050611eec565b80600a0a8681613b5157613b51615d1c565b0595505086850180881860ff90811c151589881890911c15168015613b8957600a968790059690980586019760019790970196613b8d565b8198505b5096979596505050505050565b600080613bb884606001518560400151612b9f90919063ffffffff16565b915083604001519050613bd8836040015183611d9590919063ffffffff16565b15611fd65782604001519150613bfb84606001518361422390919063ffffffff16565b90509250929050565b6000806000851215613c4c576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016103b1565b84600003613c605750600090506001613d3b565b8460ff8416850185811215613c925760405163d556b11160e01b815260048101889052602481018790526044016103b1565b6000806000831215613d00577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215613cd6576000809550955050505050613d3b565b82600003600a0a9150818481613cee57613cee615d1c565b0495505084029091149150613d3b9050565b6000831315613d3057613d1483600a615e6a565b9150613d208285615e76565b955060019450613d3b9350505050565b509193506001925050505b935093915050565b6000806000613d528585614254565b90925090506000816004811115613d6b57613d6b615a3e565b148015613d895750856001600160a01b0316826001600160a01b0316145b806138ca57506138ca868686614296565b6060613da984846000856143b3565b949350505050565b60608315613e20578251600003613e19576001600160a01b0385163b613e195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b1565b5081613da9565b613da983836144a5565b600080821215613e5157600160ff1b8203613e4a5750600160ff1b919050565b5060000390565b5090565b919050565b60008060001983850993909202808410938190039390930393915050565b6000806000613e878686613e5a565b9150915081600003613eac57838181613ea257613ea2615d1c565b0492505050610644565b838210613ef6576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016103b1565b600084868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a0290910302600082900382900490920185841190960395909502919093039390930492909217029150509392505050565b60008060008587181215613fd0577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115613fc357600160ff1b8401613fb15750600160ff1b905081611eec565b5050600a820460000360018201611eec565b5050600082900381611eec565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614007575050600a820460018201611eec565b5082905081611eec565b600080600160ff1b8403614076577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036140695760405163d556b11160e01b815260048101859052602481018490526044016103b1565b600a840593508260010192505b505060009190910391565b6000808360000361409757506000905080611fd6565b827f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085056000036141d6576f4b3b4ca85a86c47a098a22400000000085056000036140f8576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850560000361412e57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c6400000000000000008505600003614165576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850560000361419f57606485029450600284039350614165565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085056000036141d657600a850294506001840393505b600a80860290810586036141ee578095506001850394505b848212156142195760405163d556b11160e01b815260048101879052602481018390526044016103b1565b5093949293505050565b60006001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612bd0868686866144cf565b600080825160410361428a5760208301516040840151606085015160001a61427e878285856145dc565b94509450505050611fd6565b50600090506002611fd6565b6000806000856001600160a01b0316631626ba7e60e01b86866040516024016142c0929190615e8d565b60408051601f198184030181529181526020820180516001600160e01b03167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516143169190615d54565b600060405180830381855afa9150503d8060008114614351576040519150601f19603f3d011682016040523d82523d6000602084013e614356565b606091505b509150915081801561436a57506020815110155b80156138ca575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906143a890830160209081019084016156ae565b149695505050505050565b60608247101561442b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103b1565b600080866001600160a01b031685876040516144479190615d54565b60006040518083038185875af1925050503d8060008114614484576040519150601f19603f3d011682016040523d82523d6000602084013e614489565b606091505b509150915061449a87838387613db1565b979650505050505050565b8151156144b55781518083602001fd5b8060405162461bcd60e51b81526004016103b19190615ccd565b600080851580156144df57508315155b156144ef57506000905080611eec565b6144f98686614081565b90965094506145088484614081565b9094509250600061451887613e2a565b9050600061452586613e2a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c8183101561457957507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b6000891261459d578661458c828b615ea6565b6145969190615ea6565b94506145b5565b806145a8888b615ea6565b6145b29190615ea6565b94505b6145cb8a896145c5878688613e78565b88613f62565b909b909a5098505050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156146135750600090506003611eec565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614667573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661469057600060019250925050611eec565b9660009650945050505050565b60405180608001604052806146b06146cb565b81526020016000815260200160008152602001606081525090565b6040518060a0016040528060006001600160a01b0316815260200161471c604051806060016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b815260606020820181905260408201819052600091015290565b6040518060e001604052806147496146cb565b81526020016000815260200160008019168152602001600080191681526020016060815260200160008152602001606081525090565b60006020828403121561479157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461064457600080fd5b6001600160a01b038116811461223057600080fd5b8035613e55816147c1565b60008083601f8401126147f357600080fd5b50813567ffffffffffffffff81111561480b57600080fd5b6020830191508360208260051b8501011115611fd657600080fd5b60008060008060006080868803121561483e57600080fd5b8535614849816147c1565b94506020860135935060408601359250606086013567ffffffffffffffff81111561487357600080fd5b61487f888289016147e1565b969995985093965092949392505050565b600060a082840312156148a257600080fd5b50919050565b6000806000604084860312156148bd57600080fd5b833567ffffffffffffffff808211156148d557600080fd5b6148e187838801614890565b945060208601359150808211156148f757600080fd5b50614904868287016147e1565b9497909650939450505050565b600060c082840312156148a257600080fd5b60008060006040848603121561493857600080fd5b833567ffffffffffffffff8082111561495057600080fd5b6148e187838801614911565b60006020828403121561496e57600080fd5b5035919050565b60008060006060848603121561498a57600080fd5b8335614995816147c1565b925060208401356149a5816147c1565b929592945050506040919091013590565b6000806000806000608086880312156149ce57600080fd5b85356149d9816147c1565b945060208601356149e9816147c1565b935060408601359250606086013567ffffffffffffffff80821115614a0d57600080fd5b818801915088601f830112614a2157600080fd5b813581811115614a3057600080fd5b896020828501011115614a4257600080fd5b9699959850939650602001949392505050565b600060208284031215614a6757600080fd5b8135610644816147c1565b600060208284031215614a8457600080fd5b813567ffffffffffffffff811115614a9b57600080fd5b82016080818503121561064457600080fd5b60008060208385031215614ac057600080fd5b823567ffffffffffffffff811115614ad757600080fd5b614ae3858286016147e1565b90969095509350505050565b60005b83811015614b0a578181015183820152602001614af2565b50506000910152565b60008151808452614b2b816020860160208601614aef565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614bb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614ba2858351614b13565b94509285019290850190600101614b68565b5092979650505050505050565b600060208284031215614bd357600080fd5b813567ffffffffffffffff811115614bea57600080fd5b613da984828501614890565b60008060408385031215614c0957600080fd5b8235614c14816147c1565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715614c5b57614c5b614c22565b60405290565b6040805190810167ffffffffffffffff81118282101715614c5b57614c5b614c22565b60405160a0810167ffffffffffffffff81118282101715614c5b57614c5b614c22565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cd057614cd0614c22565b604052919050565b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c22565b614d166020601f19601f84011601614ca7565b818152846020838601011115614d2b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060608284031215614d5a57600080fd5b614d62614c38565b90508135614d6f816147c1565b81526020820135614d7f816147c1565b6020820152604082013567ffffffffffffffff811115614d9e57600080fd5b614daa84828501614cd8565b60408301525092915050565b600067ffffffffffffffff821115614dd057614dd0614c22565b5060051b60200190565b600060408284031215614dec57600080fd5b614df4614c61565b90508135614e01816147c1565b808252506020820135602082015292915050565b600082601f830112614e2657600080fd5b81356020614e3b614e3683614db6565b614ca7565b8083825260208201915060208460061b870101935086841115614e5d57600080fd5b602086015b84811015614e8257614e748882614dda565b835291830191604001614e62565b509695505050505050565b600060a08284031215614e9f57600080fd5b614ea7614c84565b9050614eb2826147d6565b8152602082013567ffffffffffffffff80821115614ecf57600080fd5b614edb85838601614d48565b60208401526040840135915080821115614ef457600080fd5b614f0085838601614e15565b60408401526060840135915080821115614f1957600080fd5b50614f2684828501614e15565b6060830152506080820135608082015292915050565b6000614f4a614e3684614db6565b8381529050602080820190600585811b850187811115614f6957600080fd5b855b8181101561506257803567ffffffffffffffff80821115614f8c5760008081fd5b908801906060828c031215614fa15760008081fd5b614fa9614c38565b8235614fb4816147c1565b81528287013582811115614fc85760008081fd5b8301601f81018d13614fda5760008081fd5b8035614fe8614e3682614db6565b81815290881b8201890190898101908f8311156150055760008081fd5b928a01925b828410156150235783358252928a0192908a019061500a565b848b0152506040915050838101358381111561503f5760008081fd5b61504b8e828701614cd8565b918301919091525087525050938301938301614f6b565b50505050509392505050565b600082601f83011261507f57600080fd5b61064483833560208501614f3c565b600080600080600061014086880312156150a757600080fd5b853567ffffffffffffffff808211156150bf57600080fd5b6150cb89838a01614e8d565b965060208801359150808211156150e157600080fd5b6150ed89838a01614e8d565b95506150fc8960408a01614911565b945061010088013591508082111561511357600080fd5b61511f89838a0161506e565b935061012088013591508082111561513657600080fd5b506151438882890161506e565b9150509295509295909350565b600061515e614e3684614db6565b80848252602080830192508560051b85013681111561517c57600080fd5b855b8181101561520e57803567ffffffffffffffff8082111561519f5760008081fd5b8189019150604082360312156151b55760008081fd5b6151bd614c61565b8235828111156151cd5760008081fd5b6151d936828601614d48565b82525085830135828111156151ee5760008081fd5b6151fa3682860161506e565b82880152508752505093820193820161517e565b50919695505050505050565b600061034f3683614e8d565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000813561525e816147c1565b6001600160a01b03908116845260208301359061527a826147c1565b166020840152604082013536839003601e1901811261529857600080fd5b820160208101903567ffffffffffffffff8111156152b557600080fd5b8036038213156152c457600080fd5b606060408601526152d9606086018284615226565b95945050505050565b6000808335601e198436030181126152f957600080fd5b830160208101925035905067ffffffffffffffff81111561531957600080fd5b8060061b3603821315611fd657600080fd5b8183526000602080850194508260005b8581101561537357813561534e816147c1565b6001600160a01b0316875281830135838801526040968701969091019060010161533b565b509495945050505050565b60006001600160a01b0380861683528460208401526060604084015283356153a5816147c1565b166060830152602083013536849003605e190181126153c357600080fd5b60a060808401526153da6101008401858301615251565b90506153e960408501856152e2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0808685030160a087015261541f84838561532b565b935061542e60608801886152e2565b93509150808685030160c08701525061544883838361532b565b92505050608084013560e084015280915050949350505050565b6000808335601e1984360301811261547957600080fd5b83018035915067ffffffffffffffff82111561549457600080fd5b6020019150600681901b3603821315611fd657600080fd5b60008235605e198336030181126154c257600080fd5b9190910192915050565b600061034f3683614d48565b6000604082840312156154ea57600080fd5b6106448383614dda565b60008151808452602080850194506020840160005b8381101561537357815180516001600160a01b031688528301518388015260409096019590820190600101615509565b60006001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e0850152615587610100850182614b13565b9050604083015184820360408601526155a082826154f4565b915050606083015184820360608601526155ba82826154f4565b915050608083015160808501528091505092915050565b6001600160a01b03841681528260208201526060604082015260006152d96060830184615539565b6000808335601e1984360301811261561057600080fd5b83018035915067ffffffffffffffff82111561562b57600080fd5b602001915036819003821315611fd657600080fd5b6001600160a01b03851681528360208201526060604082015260006138ca606083018486615226565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301526156a260a083018486615226565b98975050505050505050565b6000602082840312156156c057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561034f5761034f6156c7565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126154c257600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261575157600080fd5b83018035915067ffffffffffffffff82111561576c57600080fd5b6020019150600581901b3603821315611fd657600080fd5b6000610644368484614f3c565b8284823760008382016000815283516157ae818360208801614aef565b0195945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126154c257600080fd5b6000608082360312156157fe57600080fd5b6040516080810167ffffffffffffffff828210818311171561582257615822614c22565b81604052843591508082111561583757600080fd5b61584336838701614e8d565b83526020850135602084015260408501356040840152606085013591508082111561586d57600080fd5b5061587a3682860161506e565b60608301525092915050565b60008151808452602080850194506020840160005b838110156153735781518752958201959082019060010161589b565b60006001600160a01b038087168352602060808185015286516080808601526158e4610100860182615539565b90508188015160a086015260408089015160c08701526060808a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808885030160e08901528381518086528686019150868160051b870101878401935060005b8281101561599f57601f1988830301845284518a815116835289810151878b85015261597388850182615886565b91890151848303858b015291905061598b8183614b13565b968b0196958b019593505050600101615945565b5080995050505050505050505083604083015282606083015295945050505050565b60006101206001600160a01b03871683528060208401526159e481840187615539565b905082810360408401526159f88186615539565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03831681526040810160048310615a8257634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015615adc57601f19868403018952615aca838351615886565b98840198925090830190600101615aae565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201526000604083015160e06060840152615b23610100840182614b13565b9050606084015160808401526080840151601f19808584030160a0860152615b4b8383615a8f565b925060a08601519150808584030160c0860152615b688383615886565b925060c08601519150808584030160e0860152506152d98282615886565b600082601f830112615b9757600080fd5b81516020615ba7614e3683614db6565b8083825260208201915060208460051b870101935086841115615bc957600080fd5b602086015b84811015614e825780518352918301918301615bce565b60008060408385031215615bf857600080fd5b825167ffffffffffffffff80821115615c1057600080fd5b818501915085601f830112615c2457600080fd5b81516020615c34614e3683614db6565b82815260059290921b84018101918181019089841115615c5357600080fd5b948201945b83861015615c7157855182529482019490820190615c58565b91880151919650909350505080821115615c8a57600080fd5b50615c9785828601615b86565b9150509250929050565b828152604060208201526000613da96040830184615886565b6020815260006106446020830184615539565b6020815260006106446020830184614b13565b60006000198203615cf357615cf36156c7565b5060010190565b6001600160a01b0383168152604060208201526000613da96040830184615a8f565b634e487b7160e01b600052601260045260246000fd5b600060208284031215615d4457600080fd5b8151801515811461064457600080fd5b600082516154c2818460208701614aef565b8082018281126000831280158216821582161715610e6857610e686156c7565b600181815b80851115615dc1578160001904821115615da757615da76156c7565b80851615615db457918102915b93841c9390800290615d8b565b509250929050565b600082615dd85750600161034f565b81615de55750600061034f565b8160018114615dfb5760028114615e0557615e21565b600191505061034f565b60ff841115615e1657615e166156c7565b50506001821b61034f565b5060208310610133831016604e8410600b8410161715615e44575081810a61034f565b615e4e8383615d86565b8060001904821115615e6257615e626156c7565b029392505050565b60006106448383615dc9565b808202811582820484141761034f5761034f6156c7565b828152604060208201526000613da96040830184614b13565b8181036000831280158383131683831282161715615ec657615ec66156c7565b509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564