112.3k txs
51.83m calls
constructor
constructor(address _forwarder, address _factoryRegistry, address _v1Factory, address _factory, address _voter, address _weth)
functions
defaultFactory
viewfunction defaultFactory() view returns (address)
ETHER
viewfunction ETHER() view returns (address)
factoryRegistry
viewfunction factoryRegistry() view returns (address)
generateZapInParams
viewfunction generateZapInParams(address tokenA, address tokenB, bool stable, address _factory, uint256 amountInA, uint256 amountInB, tuple[] routesA, tuple[] routesB) view returns (uint256 amountOutMinA, uint256 amountOutMinB, uint256 amountAMin, uint256 amountBMin)
generateZapOutParams
viewfunction generateZapOutParams(address tokenA, address tokenB, bool stable, address _factory, uint256 liquidity, tuple[] routesA, tuple[] routesB) view returns (uint256 amountOutMinA, uint256 amountOutMinB, uint256 amountAMin, uint256 amountBMin)
getAmountsOut
viewfunction getAmountsOut(uint256 amountIn, tuple[] routes) view returns (uint256[] amounts)
getReserves
viewfunction getReserves(address tokenA, address tokenB, bool stable, address _factory) view returns (uint256 reserveA, uint256 reserveB)
isTrustedForwarder
viewfunction isTrustedForwarder(address forwarder) view returns (bool)
pairFor
viewfunction pairFor(address tokenA, address tokenB, bool stable, address _factory) view returns (address pool)
poolFor
viewfunction poolFor(address tokenA, address tokenB, bool stable, address _factory) view returns (address pool)
quoteAddLiquidity
viewfunction quoteAddLiquidity(address tokenA, address tokenB, bool stable, address _factory, uint256 amountADesired, uint256 amountBDesired) view returns (uint256 amountA, uint256 amountB, uint256 liquidity)
quoteRemoveLiquidity
viewfunction quoteRemoveLiquidity(address tokenA, address tokenB, bool stable, address _factory, uint256 liquidity) view returns (uint256 amountA, uint256 amountB)
quoteStableLiquidityRatio
viewfunction quoteStableLiquidityRatio(address tokenA, address tokenB, address _factory) view returns (uint256 ratio)
sortTokens
purefunction sortTokens(address tokenA, address tokenB) pure returns (address token0, address token1)
v1Factory
viewfunction v1Factory() view returns (address)
voter
viewfunction voter() view returns (address)
weth
viewfunction weth() view returns (address)
addLiquidity
nonpayablefunction addLiquidity(address tokenA, address tokenB, bool stable, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity)
addLiquidityETH
payablefunction addLiquidityETH(address token, bool stable, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity)
removeLiquidity
nonpayablefunction removeLiquidity(address tokenA, address tokenB, bool stable, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)
removeLiquidityETH
nonpayablefunction removeLiquidityETH(address token, bool stable, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountToken, uint256 amountETH)
removeLiquidityETHSupportingFeeOnTransferTokens
nonpayablefunction removeLiquidityETHSupportingFeeOnTransferTokens(address token, bool stable, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountETH)
swapExactETHForTokens
payablefunction swapExactETHForTokens(uint256 amountOutMin, tuple[] routes, address to, uint256 deadline) payable returns (uint256[] amounts)
swapExactETHForTokensSupportingFeeOnTransferTokens
payablefunction swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, tuple[] routes, address to, uint256 deadline) payable
swapExactTokensForETH
nonpayablefunction swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, tuple[] routes, address to, uint256 deadline) returns (uint256[] amounts)
swapExactTokensForETHSupportingFeeOnTransferTokens
nonpayablefunction swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, tuple[] routes, address to, uint256 deadline)
swapExactTokensForTokens
nonpayablefunction swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, tuple[] routes, address to, uint256 deadline) returns (uint256[] amounts)
swapExactTokensForTokensSupportingFeeOnTransferTokens
nonpayablefunction swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, tuple[] routes, address to, uint256 deadline)
UNSAFE_swapExactTokensForTokens
nonpayablefunction UNSAFE_swapExactTokensForTokens(uint256[] amounts, tuple[] routes, address to, uint256 deadline) returns (uint256[])
zapIn
payablefunction zapIn(address tokenIn, uint256 amountInA, uint256 amountInB, tuple zapInPool, tuple[] routesA, tuple[] routesB, address to, bool stake) payable returns (uint256 liquidity)
zapOut
nonpayablefunction zapOut(address tokenOut, uint256 liquidity, tuple zapOutPool, tuple[] routesA, tuple[] routesB)
events
No events.
errors
ConversionFromV2ToV1VeloProhibited
error ConversionFromV2ToV1VeloProhibited()
ETHTransferFailed
error ETHTransferFailed()
Expired
error Expired()
InsufficientAmount
error InsufficientAmount()
InsufficientAmountA
error InsufficientAmountA()
InsufficientAmountADesired
error InsufficientAmountADesired()
InsufficientAmountAOptimal
error InsufficientAmountAOptimal()
InsufficientAmountB
error InsufficientAmountB()
InsufficientAmountBDesired
error InsufficientAmountBDesired()
InsufficientLiquidity
error InsufficientLiquidity()
InsufficientOutputAmount
error InsufficientOutputAmount()
InvalidAmountInForETHDeposit
error InvalidAmountInForETHDeposit()
InvalidPath
error InvalidPath()
InvalidRouteA
error InvalidRouteA()
InvalidRouteB
error InvalidRouteB()
InvalidTokenInForETHDeposit
error InvalidTokenInForETHDeposit()
OnlyWETH
error OnlyWETH()
PoolDoesNotExist
error PoolDoesNotExist()
PoolFactoryDoesNotExist
error PoolFactoryDoesNotExist()
SameAddresses
error SameAddresses()
ZeroAddress
error ZeroAddress()
creation bytecode
0x6101406040523480156200001257600080fd5b50604051620061f5380380620061f5833981016040819052620000359162000082565b6001600160a01b0395861660805293851660a05291841660c052831660e052821661010052166101205262000103565b80516001600160a01b03811681146200007d57600080fd5b919050565b60008060008060008060c087890312156200009c57600080fd5b620000a78762000065565b9550620000b76020880162000065565b9450620000c76040880162000065565b9350620000d76060880162000065565b9250620000e76080880162000065565b9150620000f760a0880162000065565b90509295509295509295565b60805160a05160c05160e0516101005161012051615f9f62000256600039600081816101ec0152818161033c015281816109dd01528181610bb301528181610c5f01528181610ce301528181610d6201528181610dd601528181611eb001528181611fc501528181612053015281816121d6015281816124b9015281816124ef01528181612545015281816125da0152818161270c015281816128de01528181612e0a01528181612e5a015281816131b8015281816131db01528181613542015281816135fb0152818161445a01526144eb0152600081816103c5015261337f01526000818161066b0152818161088701528181611351015281816115750152818161177d0152818161251101528181613fc10152818161406201526140ec0152600081816105110152611a330152600081816102dd01526117d6015260008181610464015261369d0152615f9f6000f3fe6080604052600436106101dc5760003560e01c8063874029d911610102578063cac88ea911610095578063e4ea9d7411610064578063e4ea9d74146106ad578063f5ba53c7146106cd578063fb49bafd146106fb578063fe411f141461070e57600080fd5b8063cac88ea914610619578063ce700c2914610639578063d4b6846d14610659578063d7b0e0a51461068d57600080fd5b8063a81b9159116100d1578063a81b9159146105a6578063b7e0d4c0146105c6578063c6b7f1b6146105d9578063c92de3ec146105f957600080fd5b8063874029d91461053357806388cd821e146105535780638c0037dc14610573578063903638a41461059357600080fd5b806342cb1fbc1161017a578063572b6c0511610149578063572b6c05146104475780635a47ddc3146104a45780637539d413146104df5780638083f7bb146104ff57600080fd5b806342cb1fbc1461038b57806346c96aac146103b3578063544caa56146103e75780635509a1ac1461042757600080fd5b80633bf0c9fb116101b65780633bf0c9fb146102cb5780633da5acba146103175780633fc8cef31461032a5780634111d5971461035e57600080fd5b806307db50fa146102315780630dede6c41461027657806312bc3aca146102ab57600080fd5b3661022c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022a576040516301f180c960e01b815260040160405180910390fd5b005b600080fd5b34801561023d57600080fd5b5061025161024c3660046151a5565b61072e565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b34801561028257600080fd5b50610296610291366004615275565b610870565b6040805192835260208301919091520161026d565b3480156102b757600080fd5b5061022a6102c63660046152fa565b6109c9565b3480156102d757600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161026d565b61022a61032536600461536c565b610cd7565b34801561033657600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036a57600080fd5b5061037e61037936600461543b565b611068565b60405161026d9190615506565b34801561039757600080fd5b506102ff73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156103bf57600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f357600080fd5b5061040761040236600461554a565b6111c8565b604080516001600160a01b0393841681529290911660208301520161026d565b34801561043357600080fd5b5061037e61044236600461560b565b611253565b34801561045357600080fd5b506104946104623660046156b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b604051901515815260200161026d565b3480156104b057600080fd5b506104c46104bf3660046156cf565b611548565b6040805193845260208401929092529082015260600161026d565b3480156104eb57600080fd5b506102516104fa36600461575e565b611640565b34801561050b57600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053f57600080fd5b506102ff61054e366004615823565b611779565b34801561055f57600080fd5b5061022a61056e3660046152fa565b611c67565b34801561057f57600080fd5b5061029661058e366004615823565b611de8565b61037e6105a136600461536c565b611ea2565b3480156105b257600080fd5b5061022a6105c1366004615898565b612183565b6104c46105d4366004615938565b6124a4565b3480156105e557600080fd5b5061037e6105f43660046152fa565b6126f6565b34801561060557600080fd5b506102966106143660046159aa565b6129bd565b34801561062557600080fd5b5061037e6106343660046152fa565b612b06565b34801561064557600080fd5b506104c4610654366004615a0e565b612c15565b34801561066557600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069957600080fd5b506102966106a8366004615938565b612df7565b3480156106b957600080fd5b506102ff6106c8366004615823565b612ed5565b3480156106d957600080fd5b506106ed6106e8366004615a7c565b612eec565b60405190815260200161026d565b6106ed610709366004615ac7565b613160565b34801561071a57600080fd5b506106ed610729366004615938565b613530565b8585600080606087156107c3576107978b8a8a808060200260200160405190810160405280939291908181526020016000905b8282101561078d5761077e60808302860136819003810190615b98565b81526020019060010190610761565b5050505050611253565b905080600182516107a89190615bca565b815181106107b8576107b8615bdd565b602002602001015194505b85156108475761081b8a8888808060200260200160405190810160405280939291908181526020016000905b8282101561078d5761080c60808302860136819003810190615b98565b815260200190600101906107ef565b9050806001825161082c9190615bca565b8151811061083c5761083c615bdd565b602002602001015193505b6108558f8f8f8f8989612c15565b508093508194505050509a509a509a509a9650505050505050565b6000808261087d81613675565b60006108ab8c8c8c7f0000000000000000000000000000000000000000000000000000000000000000611779565b90506108ca6108b8613699565b6001600160a01b03831690838c6136dd565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af1158015610916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a9190615bf3565b91509150600061094a8f8f6111c8565b509050806001600160a01b03168f6001600160a01b03161461096d578183610970565b82825b90975095508a871015610996576040516323d9bb0560e21b815260040160405180910390fd5b898610156109b757604051630d32418960e21b815260040160405180910390fd5b50505050509850989650505050505050565b806109d381613675565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585610a0a600182615bca565b818110610a1957610a19615bdd565b9050608002016020016020810190610a3191906156b2565b6001600160a01b031614610a58576040516320db826760e01b815260040160405180910390fd5b610b3f85856000818110610a6e57610a6e615bdd565b610a8492602060809092020190810191506156b2565b610a8c613699565b610b3988886000818110610aa257610aa2615bdd565b610ab892602060809092020190810191506156b2565b89896000818110610acb57610acb615bdd565b9050608002016020016020810190610ae391906156b2565b8a8a6000818110610af657610af6615bdd565b9050608002016040016020810190610b0e9190615c17565b8b8b6000818110610b2157610b21615bdd565b905060800201606001602081019061054e91906156b2565b8a61374e565b610b9b8585808060200260200160405190810160405280939291908181526020016000905b82821015610b9057610b8160808302860136819003810190615b98565b81526020019060010190610b64565b505050505030613846565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190615c34565b905086811015610c49576040516342301c2360e01b815260040160405180910390fd5b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015610cab57600080fd5b505af1158015610cbf573d6000803e3d6000fd5b50505050610ccd8482613c6f565b5050505050505050565b80610ce181613675565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110610d1e57610d1e615bdd565b610d3492602060809092020190810191506156b2565b6001600160a01b031614610d5b576040516320db826760e01b815260040160405180910390fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb610e1988886000818110610aa257610aa2615bdd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190615c4d565b610e9657610e96615c6a565b6000610ea3600187615bca565b90506000878783818110610eb957610eb9615bdd565b9050608002016020016020810190610ed191906156b2565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a0823190602401602060405180830381865afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3d9190615c34565b9050610f9b8888808060200260200160405190810160405280939291908181526020016000905b82821015610f9057610f8160808302860136819003810190615b98565b81526020019060010190610f64565b505050505087613846565b8881898985818110610faf57610faf615bdd565b9050608002016020016020810190610fc791906156b2565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a08231906024015b602060405180830381865afa158015611010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110349190615c34565b61103e9190615bca565b101561105d576040516342301c2360e01b815260040160405180910390fd5b505050505050505050565b60608161107481613675565b61115d8686600081811061108a5761108a615bdd565b6110a092602060809092020190810191506156b2565b6110a8613699565b61113d898960008181106110be576110be615bdd565b6110d492602060809092020190810191506156b2565b8a8a60008181106110e7576110e7615bdd565b90506080020160200160208101906110ff91906156b2565b8b8b600081811061111257611112615bdd565b905060800201604001602081019061112a9190615c17565b8c8c6000818110610b2157610b21615bdd565b8a60008151811061115057611150615bdd565b602002602001015161374e565b6111ba878787808060200260200160405190810160405280939291908181526020016000905b828210156111af576111a060808302860136819003810190615b98565b81526020019060010190611183565b505050505086613d02565b8691505b5095945050505050565b600080826001600160a01b0316846001600160a01b0316036111fd57604051633295f3fd60e21b815260040160405180910390fd5b826001600160a01b0316846001600160a01b03161061121d578284611220565b83835b90925090506001600160a01b03821661124c5760405163d92e233d60e01b815260040160405180910390fd5b9250929050565b6060600182511015611278576040516320db826760e01b815260040160405180910390fd5b8151611285906001615c80565b6001600160401b0381111561129c5761129c6153d2565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b50905082816000815181106112dc576112dc615bdd565b6020908102919091010152815160005b81811015611540576000806001600160a01b031685838151811061131257611312615bdd565b6020026020010151606001516001600160a01b03161461134f5784828151811061133e5761133e615bdd565b602002602001015160600151611371565b7f00000000000000000000000000000000000000000000000000000000000000005b905060006113d886848151811061138a5761138a615bdd565b6020026020010151600001518785815181106113a8576113a8615bdd565b6020026020010151602001518886815181106113c6576113c6615bdd565b60200260200101516040015185611779565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192509083169063e5e31b1390602401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190615c4d565b1561152b57806001600160a01b031663f140a35a86858151811061146c5761146c615bdd565b602002602001015188868151811061148657611486615bdd565b6020026020010151600001516040518363ffffffff1660e01b81526004016114c19291909182526001600160a01b0316602082015260400190565b602060405180830381865afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190615c34565b8561150e856001615c80565b8151811061151e5761151e615bdd565b6020026020010181815250505b5050808061153890615c93565b9150506112ec565b505092915050565b60008060008361155781613675565b6115668d8d8d8d8d8d8d613f62565b909450925060006115998e8e8e7f0000000000000000000000000000000000000000000000000000000000000000611779565b90506115ae8e6115a7613699565b838861374e565b6115c18d6115ba613699565b838761374e565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162d9190615c34565b9250505099509950999650505050505050565b6000806000806116538d8d8d8d8d6129bd565b9094509250839150829050606087156116e4576116b8838a8a808060200260200160405190810160405280939291908181526020016000905b8282101561078d576116a960808302860136819003810190615b98565b8152602001906001019061168c565b905080600182516116c99190615bca565b815181106116d9576116d9615bdd565b602002602001015194505b85156117685761173c828888808060200260200160405190810160405280939291908181526020016000905b8282101561078d5761172d60808302860136819003810190615b98565b81526020019060010190611710565b9050806001825161174d9190615bca565b8151811061175d5761175d615bdd565b602002602001015193505b509950995099509995505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000816001600160a01b038416156117b257836117b4565b815b60405163d1ea0a1d60e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063d1ea0a1d90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190615c4d565b61186057604051634d39d5a360e11b815260040160405180910390fd5b6000826001600160a01b0316638c7c53ce6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190615cac565b90506000836001600160a01b031663c6751c096040518163ffffffff1660e01b8152600401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a9190615cac565b9050806001600160a01b0316896001600160a01b031614801561195e5750816001600160a01b0316886001600160a01b0316145b1561197c57604051639cda859960e01b815260040160405180910390fd5b816001600160a01b0316896001600160a01b03161480156119ae5750806001600160a01b0316886001600160a01b0316145b15611a2057836001600160a01b0316638e39ee166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190615cac565b945050505050611c5f565b600080611a2d8b8b6111c8565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614611b6357600082828b604051602001611a8193929190615cc9565b604051602081830303815290604052805190602001209050611b5b866001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190615cac565b604051603881018990526f5af43d82803e903d91602b57fd5bf3ff60248201526014810191909152733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018390526037600c8201206078820152605560439091012090565b975050611c58565b6000856001600160a01b0316639aab92486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc79190615c34565b90508583838c604051602001611bdf93929190615cc9565b6040516020818303038152906040528051906020012082604051602001611c3b939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b6040516020818303038152906040528051906020012060001c9750505b5050505050505b949350505050565b80611c7181613675565b611c8785856000818110610a6e57610a6e615bdd565b6000611c94600186615bca565b90506000868683818110611caa57611caa615bdd565b9050608002016020016020810190611cc291906156b2565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2e9190615c34565b9050611d8c8787808060200260200160405190810160405280939291908181526020016000905b82821015611d8157611d7260808302860136819003810190615b98565b81526020019060010190611d55565b505050505086613846565b8781888885818110611da057611da0615bdd565b9050608002016020016020810190611db891906156b2565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610ff3565b6000806000611df787876111c8565b509050600080611e0989898989611779565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6a9190615cfc565b5091509150826001600160a01b0316896001600160a01b031614611e8f578082611e92565b81815b909a909950975050505050505050565b606081611eae81613675565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611eeb57611eeb615bdd565b611f0192602060809092020190810191506156b2565b6001600160a01b031614611f28576040516320db826760e01b815260040160405180910390fd5b611f7a348787808060200260200160405190810160405280939291908181526020016000905b8282101561078d57611f6b60808302860136819003810190615b98565b81526020019060010190611f4e565b9150868260018451611f8c9190615bca565b81518110611f9c57611f9c615bdd565b60200260200101511015611fc3576040516342301c2360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061200557612005615bdd565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561203857600080fd5b505af115801561204c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61209688886000818110610aa257610aa2615bdd565b846000815181106120a9576120a9615bdd565b60200260200101516040518363ffffffff1660e01b81526004016120e29291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015612101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121259190615c4d565b61213157612131615c6a565b6111be828787808060200260200160405190810160405280939291908181526020016000905b828210156111af5761217460808302860136819003810190615b98565b81526020019060010190612157565b600061219260208701876156b2565b905060006121a660408801602089016156b2565b905060006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146121d457896121f6565b7f00000000000000000000000000000000000000000000000000000000000000005b905061220289896141cb565b6000816001600160a01b0316846001600160a01b03161461234e576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015612261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122859190615c34565b90506001600160a01b038216888861229e600182615bca565b8181106122ad576122ad615bdd565b90506080020160200160208101906122c591906156b2565b6001600160a01b0316146122ec576040516309d41c6760e31b815260040160405180910390fd5b61234e84828b608001358b8b808060200260200160405190810160405280939291908181526020016000905b828210156123445761233560808302860136819003810190615b98565b81526020019060010190612318565b5050505050614330565b816001600160a01b0316836001600160a01b03161461248e576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190615c34565b90506001600160a01b03821686866123e8600182615bca565b8181106123f7576123f7615bdd565b905060800201602001602081019061240f91906156b2565b6001600160a01b031614612436576040516332b2410360e21b815260040160405180910390fd5b61248e83828b60a001358989808060200260200160405190810160405280939291908181526020016000905b828210156123445761247f60808302860136819003810190615b98565b81526020019060010190612462565b6124978b614412565b5050505050505050505050565b6000806000836124b381613675565b6124e28b7f00000000000000000000000000000000000000000000000000000000000000008c8c348d8d613f62565b909450925060006125358c7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000611779565b90506125438c6115a7613699565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015612627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264b9190615c4d565b61265757612657615c6a565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af115801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c39190615c34565b9250833411156126e7576126e76126d8613699565b6126e28634615bca565b613c6f565b50509750975097945050505050565b60608161270281613675565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686612739600182615bca565b81811061274857612748615bdd565b905060800201602001602081019061276091906156b2565b6001600160a01b031614612787576040516320db826760e01b815260040160405180910390fd5b6127d9888787808060200260200160405190810160405280939291908181526020016000905b8282101561078d576127ca60808302860136819003810190615b98565b815260200190600101906127ad565b91508682600184516127eb9190615bca565b815181106127fb576127fb615bdd565b60200260200101511015612822576040516342301c2360e01b815260040160405180910390fd5b61287f8686600081811061283857612838615bdd565b61284e92602060809092020190810191506156b2565b612856613699565b61286c898960008181106110be576110be615bdd565b8560008151811061115057611150615bdd565b6128dc828787808060200260200160405190810160405280939291908181526020016000905b828210156128d1576128c260808302860136819003810190615b98565b815260200190600101906128a5565b505050505030613d02565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161291a9190615bca565b8151811061292a5761292a615bdd565b60200260200101516040518263ffffffff1660e01b815260040161295091815260200190565b600060405180830381600087803b15801561296a57600080fd5b505af115801561297e573d6000803e3d6000fd5b505050506129b28483600185516129959190615bca565b815181106129a5576129a5615bdd565b6020026020010151613c6f565b509695505050505050565b6000806000846001600160a01b0316636801cc308989896040518463ffffffff1660e01b81526004016129f293929190615d2a565b602060405180830381865afa158015612a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a339190615cac565b90506001600160a01b038116612a50576000809250925050612afc565b600080612a5f8a8a8a8a611de8565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac79190615c34565b905080612ad48489615d4e565b612ade9190615d7b565b955080612aeb8389615d4e565b612af59190615d7b565b9450505050505b9550959350505050565b606081612b1281613675565b612b64888787808060200260200160405190810160405280939291908181526020016000905b8282101561078d57612b5560808302860136819003810190615b98565b81526020019060010190612b38565b9150868260018451612b769190615bca565b81518110612b8657612b86615bdd565b60200260200101511015612bad576040516342301c2360e01b815260040160405180910390fd5b612bc38686600081811061283857612838615bdd565b6129b2828787808060200260200160405190810160405280939291908181526020016000905b828210156111af57612c0660808302860136819003810190615b98565b81526020019060010190612be9565b600080600080866001600160a01b0316636801cc308b8b8b6040518463ffffffff1660e01b8152600401612c4b93929190615d2a565b602060405180830381865afa158015612c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8c9190615cac565b9050600080806001600160a01b03841615612d1757836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d039190615c34565b9050612d118d8d8d8d611de8565b90935091505b82158015612d23575081155b15612d54578896508795506103e8612d43612d3e888a615d4e565b6145dd565b612d4d9190615bca565b9450612de7565b6000612d618a85856146cc565b9050888111612da957899750955085612da284612d7e848b615d4e565b612d889190615d7b565b84612d93858b615d4e565b612d9d9190615d7b565b61472d565b9550612de5565b6000612db68a85876146cc565b9850899750889050612de185612dcc8584615d4e565b612dd69190615d7b565b85612d93868c615d4e565b9650505b505b5050505096509650969350505050565b60008082612e0481613675565b612e348a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b308b610870565b9093509150612e448a8685614747565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b50505050612ec88583613c6f565b5097509795505050505050565b6000612ee385858585611779565b95945050505050565b600080612efc8585600186611779565b90506000856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f629190615d9d565b612f6d90600a615ea4565b90506000856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190615d9d565b612fde90600a615ea4565b6040516378a051ad60e11b8152600481018490526001600160a01b03898116602483015291925083916000919086169063f140a35a90604401602060405180830381865afa158015613034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130589190615c34565b905060008061306c8b8b60018c8888612c15565b5090925090508561308583670de0b6b3a7640000615d4e565b61308f9190615d7b565b9150846130a482670de0b6b3a7640000615d4e565b6130ae9190615d7b565b9050846130c384670de0b6b3a7640000615d4e565b6130cd9190615d7b565b9250856130e285670de0b6b3a7640000615d4e565b6130ec9190615d7b565b935080828561310386670de0b6b3a7640000615d4e565b61310d9190615d7b565b6131179190615d4e565b6131219190615d7b565b975061313588670de0b6b3a7640000615c80565b61314785670de0b6b3a7640000615d4e565b6131519190615d7b565b9b9a5050505050505050505050565b60008061316d8a8c615c80565b90508b3473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601613252578083146131b657604051633851fdc960e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b5050505050613284565b80156132715760405163ae6d566f60e01b815260040160405180910390fd5b6132848261327d613699565b308661374e565b613294828e8e8e8e8e8e8e61482f565b61329d8b614ae4565b60006132e86132af60208e018e6156b2565b8d60200160208101906132c291906156b2565b8e60400160208101906132d59190615c17565b8f606001602081019061054e91906156b2565b9050851561347e576040516335313c2160e11b81523060048201526001600160a01b03821690636a627842906024016020604051808303816000875af1158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a9190615c34565b60405163b9a09fd560e01b81526001600160a01b0383811660048301529196506000917f0000000000000000000000000000000000000000000000000000000000000000169063b9a09fd590602401602060405180830381865afa1580156133c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ea9190615cac565b90506134006001600160a01b0383168288614c4c565b604051636e553f6560e01b8152600481018790526001600160a01b038981166024830152821690636e553f6590604401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b50613478925050506001600160a01b038316826000614c4c565b506134ed565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af11580156134c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ea9190615c34565b94505b6134f68f614412565b61350b61350660208e018e6156b2565b614412565b61351e61350660408e0160208f016156b2565b505050509a9950505050505050505050565b60008161353c81613675565b61356c897f00000000000000000000000000000000000000000000000000000000000000008a8a8a8a308a610870565b6040516370a0823160e01b81523060048201529093506135e591508a9086906001600160a01b038316906370a0823190602401602060405180830381865afa1580156135bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e09190615c34565b614747565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561364757600080fd5b505af115801561365b573d6000803e3d6000fd5b505050506136698483613c6f565b50979650505050505050565b4281101561369657604051630407b05b60e31b815260040160405180910390fd5b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036136d8575060131936013560601c90565b503390565b6040516001600160a01b03808516602483015283166044820152606481018290526137489085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614d66565b50505050565b6000846001600160a01b03163b1161376557600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916137c99190615ed7565b6000604051808303816000865af19150503d8060008114613806576040519150601f19603f3d011682016040523d82523d6000602084013e61380b565b606091505b50915091508180156138355750805115806138355750808060200190518101906138359190615c4d565b61383e57600080fd5b505050505050565b815160005b8181101561374857600061389985838151811061386a5761386a615bdd565b60200260200101516000015186848151811061388857613888615bdd565b6020026020010151602001516111c8565b509050600061391e8684815181106138b3576138b3615bdd565b6020026020010151600001518785815181106138d1576138d1615bdd565b6020026020010151602001518886815181106138ef576138ef615bdd565b60200260200101516040015189878151811061390d5761390d615bdd565b602002602001015160600151611779565b905060008060006139a589878151811061393a5761393a615bdd565b6020026020010151600001518a888151811061395857613958615bdd565b6020026020010151602001518b898151811061397657613976615bdd565b6020026020010151604001518c8a8151811061399457613994615bdd565b602002602001015160600151611de8565b509050808987815181106139bb576139bb615bdd565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa158015613a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a329190615c34565b613a3c9190615bca565b925050826001600160a01b031663f140a35a838a8881518110613a6157613a61615bdd565b6020026020010151600001516040518363ffffffff1660e01b8152600401613a9c9291909182526001600160a01b0316602082015260400190565b602060405180830381865afa158015613ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613add9190615c34565b9050600080856001600160a01b03168a8881518110613afe57613afe615bdd565b6020026020010151600001516001600160a01b031614613b2057826000613b24565b6000835b91509150600060018b51613b389190615bca565b8810613b445789613be1565b613be18b613b538a6001615c80565b81518110613b6357613b63615bdd565b6020026020010151600001518c8a6001613b7d9190615c80565b81518110613b8d57613b8d615bdd565b6020026020010151602001518d8b6001613ba79190615c80565b81518110613bb757613bb7615bdd565b6020026020010151604001518e8c6001613bd19190615c80565b8151811061390d5761390d615bdd565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613c239086908690869060248101615f1f565b600060405180830381600087803b158015613c3d57600080fd5b505af1158015613c51573d6000803e3d6000fd5b50505050505050505050508080613c6790615c93565b91505061384b565b604080516000808252602082019092526001600160a01b038416908390604051613c999190615ed7565b60006040518083038185875af1925050503d8060008114613cd6576040519150601f19603f3d011682016040523d82523d6000602084013e613cdb565b606091505b5050905080613cfd5760405163b12d13eb60e01b815260040160405180910390fd5b505050565b815160005b81811015613f5b576000613d2685838151811061386a5761386a615bdd565b509050600086613d37846001615c80565b81518110613d4757613d47615bdd565b60200260200101519050600080836001600160a01b0316888681518110613d7057613d70615bdd565b6020026020010151600001516001600160a01b031614613d9257826000613d96565b6000835b91509150600060018951613daa9190615bca565b8610613db65787613e43565b613e4389613dc5886001615c80565b81518110613dd557613dd5615bdd565b6020026020010151600001518a886001613def9190615c80565b81518110613dff57613dff615bdd565b6020026020010151602001518b896001613e199190615c80565b81518110613e2957613e29615bdd565b6020026020010151604001518c8a6001613bd19190615c80565b9050613eb4898781518110613e5a57613e5a615bdd565b6020026020010151600001518a8881518110613e7857613e78615bdd565b6020026020010151602001518b8981518110613e9657613e96615bdd565b6020026020010151604001518c8a8151811061390d5761390d615bdd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ef1576020820181803683370190505b506040518563ffffffff1660e01b8152600401613f119493929190615f1f565b600060405180830381600087803b158015613f2b57600080fd5b505af1158015613f3f573d6000803e3d6000fd5b5050505050505050508080613f5390615c93565b915050613d07565b5050505050565b60008083861015613f8657604051636e35977960e11b815260040160405180910390fd5b82851015613fa75760405163acee051360e01b815260040160405180910390fd5b6040516306801cc360e41b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636801cc3090613ffa908d908d908d90600401615d2a565b602060405180830381865afa158015614017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403b9190615cac565b90506001600160a01b0381166140e1576040516320b7f73960e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906382dfdce49061409b908d908d908d90600401615d2a565b6020604051808303816000875af11580156140ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140de9190615cac565b90505b6000806141108c8c8c7f0000000000000000000000000000000000000000000000000000000000000000611de8565b91509150816000148015614122575080155b15614132578894508793506141bc565b600061413f8a84846146cc565b9050888111614174578681101561416957604051630d32418960e21b815260040160405180910390fd5b8995509350836141ba565b60006141818a84866146cc565b90508a81111561419357614193615c6a565b888110156141b4576040516323d9bb0560e21b815260040160405180910390fd5b95508894505b505b50505097509795505050505050565b60006141da60208301836156b2565b905060006141ee60408401602085016156b2565b9050600061421783836142076060880160408901615c17565b61054e6080890160608a016156b2565b905061422e6001600160a01b0382163383886136dd565b600061423a84846111c8565b5060405163226bf2d160e21b815230600482015290915060009081906001600160a01b038516906389afcb449060240160408051808303816000875af1158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac9190615bf3565b91509150600080846001600160a01b0316886001600160a01b0316146142d35782846142d6565b83835b915091508860c001358210156142ff576040516323d9bb0560e21b815260040160405180910390fd5b8860e0013581101561432457604051630d32418960e21b815260040160405180910390fd5b50505050505050505050565b600061433c8483611253565b905082816001835161434e9190615bca565b8151811061435e5761435e615bdd565b60200260200101511015614385576040516342301c2360e01b815260040160405180910390fd5b60006143fa8360008151811061439d5761439d615bdd565b602002602001015160000151846000815181106143bc576143bc615bdd565b602002602001015160200151856000815181106143db576143db615bdd565b6020026020010151604001518660008151811061390d5761390d615bdd565b9050614407868287614747565b61383e828430613d02565b600061441c613699565b9050600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601614559576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156144a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cd9190615c34565b90508015613cfd57604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561453757600080fd5b505af115801561454b573d6000803e3d6000fd5b50505050613cfd8282613c6f565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561459d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145c19190615c34565b90508015613cfd57613cfd6001600160a01b0384168383614e38565b6000816000036145ef57506000919050565b600060016145fc84614e68565b901c6001901b9050600181848161461557614615615d65565b048201901c9050600181848161462d5761462d615d65565b048201901c9050600181848161464557614645615d65565b048201901c9050600181848161465d5761465d615d65565b048201901c9050600181848161467557614675615d65565b048201901c9050600181848161468d5761468d615d65565b048201901c905060018184816146a5576146a5615d65565b048201901c90506146c5818285816146bf576146bf615d65565b0461472d565b9392505050565b6000836000036146ef57604051632ca2f52b60e11b815260040160405180910390fd5b8215806146fa575081155b156147185760405163bb55fd2760e01b815260040160405180910390fd5b826147238386615d4e565b611c5f9190615d7b565b600081831061473c578161473e565b825b90505b92915050565b6000836001600160a01b03163b1161475e57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916147ba9190615ed7565b6000604051808303816000865af19150503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b50915091508180156148265750805115806148265750808060200190518101906148269190615c4d565b613f5b57600080fd5b600061483e60208701876156b2565b9050600061485260408801602089016156b2565b905060006148666060890160408a01615c17565b9050600061487a60808a0160608b016156b2565b9050600061488a85858585611779565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156148cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f19190615cfc565b50915091506103e88211158061490957506103e88111155b15614927576040516302721e1f60e61b815260040160405180910390fd5b5050846001600160a01b03168d6001600160a01b0316146149ff576001600160a01b0385168989614959600182615bca565b81811061496857614968615bdd565b905060800201602001602081019061498091906156b2565b6001600160a01b0316146149a7576040516309d41c6760e31b815260040160405180910390fd5b6149ff8d8d8c608001358c8c808060200260200160405190810160405280939291908181526020016000905b82821015612344576149f060808302860136819003810190615b98565b815260200190600101906149d3565b836001600160a01b03168d6001600160a01b031614614ad5576001600160a01b0384168787614a2f600182615bca565b818110614a3e57614a3e615bdd565b9050608002016020016020810190614a5691906156b2565b6001600160a01b031614614a7d576040516332b2410360e21b815260040160405180910390fd5b614ad58d8c8c60a001358a8a808060200260200160405190810160405280939291908181526020016000905b8282101561234457614ac660808302860136819003810190615b98565b81526020019060010190614aa9565b50505050505050505050505050565b6000614af360208301836156b2565b90506000614b0760408401602085016156b2565b90506000614b1b6060850160408601615c17565b90506000614b2f60808601606087016156b2565b90506000614b3f85858585611779565b6040516370a0823160e01b81523060048201529091506000908190614c329088908890889088906001600160a01b038516906370a0823190602401602060405180830381865afa158015614b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bbb9190615c34565b6040516370a0823160e01b81523060048201526001600160a01b038d16906370a0823190602401602060405180830381865afa158015614bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c239190615c34565b8e60c001358f60e00135614efc565b91509150614c41878484614747565b610ccd868483614747565b801580614cc65750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015614ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc49190615c34565b155b614d365760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052613cfd90849063095ea7b360e01b90606401613711565b6000614dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661500b9092919063ffffffff16565b805190915015613cfd5780806020019051810190614dd99190615c4d565b613cfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401614d2d565b6040516001600160a01b038316602482015260448101829052613cfd90849063a9059cbb60e01b90606401613711565b600080608083901c15614e7d57608092831c92015b604083901c15614e8f57604092831c92015b602083901c15614ea157602092831c92015b601083901c15614eb357601092831c92015b600883901c15614ec557600892831c92015b600483901c15614ed757600492831c92015b600283901c15614ee957600292831c92015b600183901c156147415760010192915050565b60008083861015614f2057604051636e35977960e11b815260040160405180910390fd5b82851015614f415760405163acee051360e01b815260040160405180910390fd5b600080614f508c8c8c8c611de8565b91509150816000148015614f62575080155b15614f7257879350869250614ffc565b6000614f7f8984846146cc565b9050878111614fb45785811015614fa957604051630d32418960e21b815260040160405180910390fd5b889450925082614ffa565b6000614fc18984866146cc565b905089811115614fd357614fd3615c6a565b87811015614ff4576040516323d9bb0560e21b815260040160405180910390fd5b94508793505b505b50509850989650505050505050565b6060611c5f848460008585600080866001600160a01b031685876040516150329190615ed7565b60006040518083038185875af1925050503d806000811461506f576040519150601f19603f3d011682016040523d82523d6000602084013e615074565b606091505b509150915061508587838387615090565b979650505050505050565b606083156150ff5782516000036150f8576001600160a01b0385163b6150f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401614d2d565b5081611c5f565b611c5f83838151156151145781518083602001fd5b8060405162461bcd60e51b8152600401614d2d9190615f56565b6001600160a01b038116811461369657600080fd5b803561514e8161512e565b919050565b801515811461369657600080fd5b60008083601f84011261517357600080fd5b5081356001600160401b0381111561518a57600080fd5b6020830191508360208260071b850101111561124c57600080fd5b6000806000806000806000806000806101008b8d0312156151c557600080fd5b8a356151d08161512e565b995060208b01356151e08161512e565b985060408b01356151f081615153565b975060608b01356152008161512e565b965060808b0135955060a08b0135945060c08b01356001600160401b038082111561522a57600080fd5b6152368e838f01615161565b909650945060e08d013591508082111561524f57600080fd5b5061525c8d828e01615161565b915080935050809150509295989b9194979a5092959850565b600080600080600080600080610100898b03121561529257600080fd5b883561529d8161512e565b975060208901356152ad8161512e565b965060408901356152bd81615153565b9550606089013594506080890135935060a0890135925060c08901356152e28161512e565b8092505060e089013590509295985092959890939650565b60008060008060008060a0878903121561531357600080fd5b863595506020870135945060408701356001600160401b0381111561533757600080fd5b61534389828a01615161565b90955093505060608701356153578161512e565b80925050608087013590509295509295509295565b60008060008060006080868803121561538457600080fd5b8535945060208601356001600160401b038111156153a157600080fd5b6153ad88828901615161565b90955093505060408601356153c18161512e565b949793965091946060013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615410576154106153d2565b604052919050565b60006001600160401b03821115615431576154316153d2565b5060051b60200190565b60008060008060006080868803121561545357600080fd5b85356001600160401b038082111561546a57600080fd5b818801915088601f83011261547e57600080fd5b8135602061549361548e83615418565b6153e8565b82815260059290921b8401810191818101908c8411156154b257600080fd5b948201945b838610156154d0578535825294820194908201906154b7565b995050890135925050808211156154e657600080fd5b506154f388828901615161565b90955093506153c1905060408701615143565b6020808252825182820181905260009190848201906040850190845b8181101561553e57835183529284019291840191600101615522565b50909695505050505050565b6000806040838503121561555d57600080fd5b82356155688161512e565b915060208301356155788161512e565b809150509250929050565b60006080828403121561559557600080fd5b604051608081018181106001600160401b03821117156155b7576155b76153d2565b60405290508082356155c88161512e565b815260208301356155d88161512e565b602082015260408301356155eb81615153565b604082015260608301356155fe8161512e565b6060919091015292915050565b6000806040838503121561561e57600080fd5b823591506020808401356001600160401b0381111561563c57600080fd5b8401601f8101861361564d57600080fd5b803561565b61548e82615418565b81815260079190911b8201830190838101908883111561567a57600080fd5b928401925b828410156156a3576156918985615583565b8252848201915060808401935061567f565b80955050505050509250929050565b6000602082840312156156c457600080fd5b81356146c58161512e565b60008060008060008060008060006101208a8c0312156156ee57600080fd5b89356156f98161512e565b985060208a01356157098161512e565b975060408a013561571981615153565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a01356157458161512e565b809250506101008a013590509295985092959850929598565b600080600080600080600080600060e08a8c03121561577c57600080fd5b89356157878161512e565b985060208a01356157978161512e565b975060408a01356157a781615153565b965060608a01356157b78161512e565b955060808a0135945060a08a01356001600160401b03808211156157da57600080fd5b6157e68d838e01615161565b909650945060c08c01359150808211156157ff57600080fd5b5061580c8c828d01615161565b915080935050809150509295985092959850929598565b6000806000806080858703121561583957600080fd5b84356158448161512e565b935060208501356158548161512e565b9250604085013561586481615153565b915060608501356158748161512e565b939692955090935050565b6000610100828403121561589257600080fd5b50919050565b6000806000806000806000610180888a0312156158b457600080fd5b87356158bf8161512e565b9650602088013595506158d58960408a0161587f565b94506101408801356001600160401b03808211156158f257600080fd5b6158fe8b838c01615161565b90965094506101608a013591508082111561591857600080fd5b506159258a828b01615161565b989b979a50959850939692959293505050565b600080600080600080600060e0888a03121561595357600080fd5b873561595e8161512e565b9650602088013561596e81615153565b955060408801359450606088013593506080880135925060a08801356159938161512e565b8092505060c0880135905092959891949750929550565b600080600080600060a086880312156159c257600080fd5b85356159cd8161512e565b945060208601356159dd8161512e565b935060408601356159ed81615153565b925060608601356159fd8161512e565b949793965091946080013592915050565b60008060008060008060c08789031215615a2757600080fd5b8635615a328161512e565b95506020870135615a428161512e565b94506040870135615a5281615153565b93506060870135615a628161512e565b9598949750929560808101359460a0909101359350915050565b600080600060608486031215615a9157600080fd5b8335615a9c8161512e565b92506020840135615aac8161512e565b91506040840135615abc8161512e565b809150509250925092565b6000806000806000806000806000806101e08b8d031215615ae757600080fd5b8a35615af28161512e565b995060208b0135985060408b01359750615b0f8c60608d0161587f565b96506101608b01356001600160401b0380821115615b2c57600080fd5b615b388e838f01615161565b90985096506101808d0135915080821115615b5257600080fd5b50615b5f8d828e01615161565b9095509350506101a08b0135615b748161512e565b91506101c08b0135615b8581615153565b809150509295989b9194979a5092959850565b600060808284031215615baa57600080fd5b61473e8383615583565b634e487b7160e01b600052601160045260246000fd5b8181038181111561474157614741615bb4565b634e487b7160e01b600052603260045260246000fd5b60008060408385031215615c0657600080fd5b505080516020909101519092909150565b600060208284031215615c2957600080fd5b81356146c581615153565b600060208284031215615c4657600080fd5b5051919050565b600060208284031215615c5f57600080fd5b81516146c581615153565b634e487b7160e01b600052600160045260246000fd5b8082018082111561474157614741615bb4565b600060018201615ca557615ca5615bb4565b5060010190565b600060208284031215615cbe57600080fd5b81516146c58161512e565b6bffffffffffffffffffffffff19606094851b811682529290931b9091166014830152151560f81b602882015260290190565b600080600060608486031215615d1157600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039384168152919092166020820152901515604082015260600190565b808202811582820484141761474157614741615bb4565b634e487b7160e01b600052601260045260246000fd5b600082615d9857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215615daf57600080fd5b815160ff811681146146c557600080fd5b600181815b80851115615dfb578160001904821115615de157615de1615bb4565b80851615615dee57918102915b93841c9390800290615dc5565b509250929050565b600082615e1257506001614741565b81615e1f57506000614741565b8160018114615e355760028114615e3f57615e5b565b6001915050614741565b60ff841115615e5057615e50615bb4565b50506001821b614741565b5060208310610133831016604e8410600b8410161715615e7e575081810a614741565b615e888383615dc0565b8060001904821115615e9c57615e9c615bb4565b029392505050565b600061473e60ff841683615e03565b60005b83811015615ece578181015183820152602001615eb6565b50506000910152565b60008251615ee9818460208701615eb3565b9190910192915050565b60008151808452615f0b816020860160208601615eb3565b601f01601f19169290920160200192915050565b84815283602082015260018060a01b0383166040820152608060608201526000615f4c6080830184615ef3565b9695505050505050565b60208152600061473e6020830184615ef356fea2646970667358221220b1099ee7ddb5dc2ea1ec270042b192b9761fe430654308578bf270f4f8bb35cd64736f6c6343000813003300000000000000000000000006824df38d1d77eadeb6bafcb03904e27429ab74000000000000000000000000f4c67cdeaab8360370f41514d06e32ccd8aa1d7b00000000000000000000000025cbddb98b35ab1ff77413456b31ec81a6b6b746000000000000000000000000f1046053aa5682b4f9a81b5481394da16be5ff5a00000000000000000000000041c914ee0c7e1a5edcd0295623e6dc557b5abf3c0000000000000000000000004200000000000000000000000000000000000006