UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 1.07 MB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_addLiquidity_6909","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_failsIfNotInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_failsWithIncorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_secondAdditionSameRange_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_succeedsForNativeTokensIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_succeedsIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_succeedsWithCorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_succeedsWithHooksIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_withHooks_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addLiquidity_withNative_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_burn_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_bytecodeSize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_ERC20_accumulateFees_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_ERC20_accumulateFees_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_ERC20_returnsAllFeesIf0IsProvidedAsParameter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_locked_revertsWithProtocolFeeCurrencySynced","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_nativeToken_accumulateFees_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_nativeToken_returnsAllFeesIf0IsProvidedAsParameter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_unlocked_revertsWithProtocolFeeCurrencySynced","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_OneToken_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_failsIfNoLiquidity","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_failsIfNotInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_failsWithIncorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_succeedsForNativeTokensWhenPoolHasLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_succeedsWhenPoolHasLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_succeedsWithCorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_donate_emits_event","inputs":[{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getPosition","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_initcodeHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_mint_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_6909","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_failsIfNotInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_failsWithIncorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_someLiquidityRemains_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_succeedsForNativeTokensIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_succeedsIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_succeedsWithCorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_succeedsWithHooksIfInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_withHooks_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_withNative_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_revertsSendingNative_withTokenSynced","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_accruesProtocolFees","inputs":[{"name":"protocolFee0","type":"uint16","internalType":"uint16"},{"name":"protocolFee1","type":"uint16","internalType":"uint16"},{"name":"amountSpecified","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_againstLiqWithNative_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_againstLiquidity_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_burn6909AsInput_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_burnNative6909AsInput_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_failsIfNotInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_failsWithIncorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_mint6909IfNativeOutputNotTaken_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_mint6909IfOutputNotTaken_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_succeedsIfInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_succeedsWithCorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_succeedsWithHooksIfInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_succeedsWithNativeTokensIfInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_withHooks_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_withNative_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_withNative_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_sync_locked_collectProtocolFees_unlocked_revertsWithProtocolFeeCurrencySynced","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_failsIfLocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_failsWithInvalidTokensThatDoNotReturnTrueOnTransfer","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_failsWithNoLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_succeedsWithPoolWithLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_succeedsWithPoolWithLiquidityWithNativeToken","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_unlock_EmitsCorrectId","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_unlock_cannotBeCalledTwiceByCaller","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_unlock_cannotBeCalledTwiceByDifferentCallers","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Donate","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ModifyLiquidity","inputs":[{"name":"poolId","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"tickLower","type":"int24","indexed":false,"internalType":"int24"},{"name":"tickUpper","type":"int24","indexed":false,"internalType":"int24"},{"name":"liquidityDelta","type":"int256","indexed":false,"internalType":"int256"},{"name":"salt","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ProtocolFeeControllerUpdated","inputs":[{"name":"feeController","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"name":"poolId","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"int128","indexed":false,"internalType":"int128"},{"name":"amount1","type":"int128","indexed":false,"internalType":"int128"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"liquidity","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UnlockCallback","inputs":[],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x608080604052346102af5760605f91600160ff19600c541617600c55600160ff19601f541617601f5561003181610309565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606060405161008181610309565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176102f55760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b031790915580519081016001600160401b038111828210176102f55760405260108152602081016f726563697069656e744164647265737360801b81526040516020810190601083835e5f6030820152601081526101a2603082610324565b5190206040519063ffa1864960e01b82526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102a4575f916102b3575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102af575f906064604051809481936318caf8e360e31b835260018060a01b031696876004840152604060248401525180918160448501528484015e8181018301859052601f01601f1916810103018183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102a457610294575b50604580546001600160a01b031916919091179055604051620309989081620003488239f35b5f61029e91610324565b5f61026e565b6040513d5f823e3d90fd5b5f80fd5b90506020813d6020116102ed575b816102ce60209383610324565b810103126102af57516001600160a01b03811681036102af575f6101e3565b3d91506102c1565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b038211176102f557604052565b601f909101601f19168101906001600160401b038211908210176102f55760405256fe60808060405260043610156200001e575b5036156200001c575f80fd5b005b5f905f3560e01c90816301ad19f114620125be5750806301ed61f01462011fb557806301ffc9a71462011f4c578063085a27e9146201194d5780630a9254e414620112325780630b79251e14620111b257806312a3113014620106465780631cd821f714620104285780631d40cd14146201022e5780631d6bf33d14620100725780631ed7831c146200ffc25780631f42a469146200fea757806320563cf5146200f86857806322571edc146200f66557806325856f8c146200f1e0578063289af5f4146200ed585780632ade3880146200eb8557806333cba6d5146200e99d57806333ec58a8146200e3c457806336397c5a146200de0f57806339cd2013146200ddac5780633e5e3c23146200dcfc5780633f7286f4146200dc4c578063449d71e8146200daa157806345217033146200d96a5780634930585e146200d6a85780635128205d146200cbec57806351a7fa55146200ca30578063542524dd146200c9e057806357bd520a146200c8c457806359ea35c4146200c57457806360b350ce146200c22057806360c5c7b3146200bc2957806363962819146200ba4557806366d9a9a0146200b8d657806367e35be2146200b6d85780636a34ad88146200afb15780636fe28299146200ac775780637310e397146200aa7f57806375ed14c8146200a7aa578063770d1800146200a41057806379c13725146200a2c45780637a3c2095146200a02957806383ce7499146200997157806385226c8114620098b557806387d1c2ba14620096d35780638ce3276014620094f1578063916a17c6146200940e578063921c30ae14620093ab57806393ad73ed1462009344578063940e81ab14620091d857806394a123bb1462008f8f578063977b29b21462008cde57806397e1cedc14620086bc5780639ce0fb901462008492578063a20c3e321462008167578063a2f831691462007e67578063a654b7021462007c84578063a67d14c61462007599578063ab78a6011462007445578063b0464fdc1462007362578063b1a73b8a14620072f8578063b26df2481462006c5d578063b5508aa91462006ba1578063b87edfcc1462006a35578063b8b1f33b146200677d578063ba414fa61462006736578063ba8189b514620066d3578063bad1bb3a1462005e2e578063bb8b06961462005cc2578063bdb793fa1462005248578063bf55883b1462004f7c578063c06313ff14620048ac578063c0fb6ed8146200475a578063c720fdf11462004556578063c7b8e15d1462004516578063cb4aa8a11462004376578063cb7684891462004172578063d24a91271462003ee8578063d39bb3121462003cba578063d7c66f981462003aa1578063d8af3e0014620039ad578063d8e9c77a1462002c8b578063dbd099ba146200296f578063df36545e14620021e1578063df712a331462002088578063e05e25461462001ea6578063e20c9f711462001de5578063e21a81d214620017b4578063e6708c531462001422578063e92299611462001223578063ec6a14101462000f18578063f271ad691462000c0e578063fa7626d41462000bcb578063fb65f00714620009415763fc110d33036200001057346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000508573330146200050b5780806040513682823780368101838152039082305af1620004fe62013e78565b5015620005085780f35b80fd5b8073ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60325416813b15620009245782916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015620009195762000928575b5073ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60375416813b15620009245782916024839260405194859384927fa584119400000000000000000000000000000000000000000000000000000000845260048401525af18015620009195762000900575b505073ffffffffffffffffffffffffffffffffffffffff60375416906200065773ffffffffffffffffffffffffffffffffffffffff6200064f81602b5416620157a4565b168362015887565b604080519062000668818362012b24565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081013660208401378051916040620006a6818562012b24565b600184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110620008c157505062000726620007538596600d620006ef85620130ec565b52845130602082015273ffffffffffffffffffffffffffffffffffffffff9091166040820152600160608201529182906080820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528262012b24565b6200075e84620130ec565b526200076a83620130ec565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620008b25781517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc79e5948000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620008b75790859162000899575b505073ffffffffffffffffffffffffffffffffffffffff6032541692833b156200089557620008609385928385518097819582947f5ef24314000000000000000000000000000000000000000000000000000000008452600484016201314d565b03925af19081156200088c575062000878575b505080f35b81620008849162012b24565b620005085780f35b513d84823e3d90fd5b8480fd5b81620008a59162012b24565b620008b257835f620007ff565b505050fd5b83513d87823e3d90fd5b806060602080938801015201620006ce565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b816200090c9162012b24565b6200050857805f6200060b565b6040513d84823e3d90fd5b5050fd5b81620009349162012b24565b6200050857805f6200058b565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085762000ac1670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff602c54166020928391604051620009ac848262012b24565b8681527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835262000a7e6004840173ffffffffffffffffffffffffffffffffffffffff603954168152603a5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603b5416910152565b62000aac60a484016020548060020b825260181c60020b602082015260215460408201526060602254910152565b610140610124840152610144830190620128d7565b03925af1801562000b8c5762000b97575b506040517fdd9fca12000000000000000000000000000000000000000000000000000000008152816004820152601e60248201527f6164644c69717569646974792077697468206e617469766520746f6b656e00006044820152818160648186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000b8c5762000b59578280f35b8162000b7d92903d1062000b84575b62000b74818362012b24565b81019062012c53565b505f808280f35b503d62000b68565b6040513d85823e3d90fd5b8181813d831162000bc3575b62000baf818362012b24565b8101031262000bbf575162000ad2565b5f80fd5b503d62000ba3565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200050857602060ff601f54166040519015158152f35b5034620005085760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085760043573ffffffffffffffffffffffffffffffffffffffff811680910362000f145762000c839073fffd8963efd1fc6a506488495d951d5263988d259062014b4b565b508073ffffffffffffffffffffffffffffffffffffffff602b5416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f11576040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f6044830152606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152818160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762000ef8575b505062000ee4670de0b6b3a764000060a062000d5e62012c63565b20602c5460235460245460225460408051600285810b825260189590951c90940b6020850152830191909152606082015273ffffffffffffffffffffffffffffffffffffffff9091169182917ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec90608090a3602092839160405162000de4848262012b24565b8681527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835262000eb66004840173ffffffffffffffffffffffffffffffffffffffff603954168152603a5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603b5416910152565b62000aac60a484016023548060020b825260181c60020b602082015260245460408201526060602554910152565b03925af1801562000b8c5762000b59578280f35b8162000f049162012b24565b6200050857805f62000d43565b50fd5b5080fd5b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085733301462000f715780806040513682823780368101838152039082305af1620004fe62013e78565b8073ffffffffffffffffffffffffffffffffffffffff602b5416803b1562000f11578180916024604051809481937f2d7713890000000000000000000000000000000000000000000000000000000083523060048401525af1801562000919576200120a575b5073ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60375416813b15620009245782916024839260405194859384927fa584119400000000000000000000000000000000000000000000000000000000845260048401525af180156200091957620011f1575b5050620010a273ffffffffffffffffffffffffffffffffffffffff6037541673ffffffffffffffffffffffffffffffffffffffff6200109a81602b5416620157a4565b169062015887565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200050857806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc79e5948000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200091957620011d8575b50602073ffffffffffffffffffffffffffffffffffffffff602b5416606473ffffffffffffffffffffffffffffffffffffffff6037541660405194859384927f8161b8740000000000000000000000000000000000000000000000000000000084523060048501526024840152600160448401525af180156200091957620011bc575b5080f35b620011b89060203d60201162000b845762000b74818362012b24565b81620011e49162012b24565b6200050857805f62001135565b81620011fd9162012b24565b6200050857805f62001057565b81620012169162012b24565b6200050857805f62000fd7565b5034620005085760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085760043573ffffffffffffffffffffffffffffffffffffffff811680910362000f1457620012989073fffd8963efd1fc6a506488495d951d5263988d259062014b4b565b508073ffffffffffffffffffffffffffffffffffffffff602b5416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f11576040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f6044830152606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152818160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762001409575b505062000ee4670de0b6b3a764000060a06200137362012c63565b2073ffffffffffffffffffffffffffffffffffffffff602c541680917ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec60205460215490620013f26022546040519383859460181c60020b9060020b8590949392606092608083019660020b835260020b602083015260408201520152565b0390a36020928391604051620009ac848262012b24565b81620014159162012b24565b6200050857805f62001358565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200050857604051620014618162012a93565b8181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c60208201526c016a09e667f3bcc908b2fb13666040820152604051620014ab8162012ab0565b60018152826020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620017b057826040517f440ed10d000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762001797575b5050620015f09073ffffffffffffffffffffffffffffffffffffffff602f5416928460405185815260626020820152817f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885960403093a4602093849286604051936200158e868662012b24565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b40000000000000000000000000000000000000000000000000000000085526004850162012d69565b03925af1801562000b8c5762001767575b506040517fdd9fca12000000000000000000000000000000000000000000000000000000008152816004820152601f60248201527f73776170206d696e74206e6174697665206f75747075742061732036393039006044820152818160648186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000b8c5762001737575b50602b546040517efdd58e0000000000000000000000000000000000000000000000000000000081523060048201525f602482015291908190839073ffffffffffffffffffffffffffffffffffffffff168180604481015b03915afa90811562000b8c57839162001700575b83620016fd836201479f565b80f35b905081813d83116200172f575b62001719818362012b24565b8101031262000bbf57620016fd90515f620016f1565b503d6200170d565b8181813d83116200175f575b6200174f818362012b24565b8101031262000bbf575162001685565b503d62001743565b8181813d83116200178f575b6200177f818362012b24565b8101031262000bbf575162001601565b503d62001773565b81620017a39162012b24565b620017b057825f62001522565b8280fd5b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085773ffffffffffffffffffffffffffffffffffffffff602c54166020908282620018eb6040519362001817838662012b24565b8385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301948536858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835262000a7e6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b03925af1801562001dda5762001daa575b50602b546029546040517efdd58e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482018190529291909116908481604481855afa801562001d9f57869062001d69575b620019769150620144a4565b602a546040517efdd58e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820181905291908581604481855afa801562001d2857879062001d33575b620019e89150620144a4565b858562001b0c62001a1c620019fd87620156b6565b9462001a158162001a0e89620156b6565b996201498f565b966201498f565b9673ffffffffffffffffffffffffffffffffffffffff602c5416906040519062001a47858362012b24565b85825236858301376040517f0a5b11e400000000000000000000000000000000000000000000000000000000815260365473ffffffffffffffffffffffffffffffffffffffff9081166004830152603754808216602484015260a081901c62ffffff16604484015260b81c60020b60648301526038541660848201529485938492839190602354600281810b60a486015260189190911c900b60c484015260245460e48401526025546101048401525b610180610124840152610184830190620128d7565b6001610144830152600161016483015203925af1801562001d285762001cf8575b50602b546029546040517efdd58e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482018190529190921694909290918781604481895afa801562001ced57899062001cb7575b62001bac9150151562015504565b602a546040517efdd58e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201819052979081816044818a5afa91821562001cac578a9262001c63575b505085620016fd989462001c5d62001c5d9562001c5262001c4c9a999662001c4162001c4c97151562015504565b62001c4c85620156b6565b62014916565b62001c4c88620156b6565b6201498f565b90809995979693949250813d831162001ca4575b62001c83818362012b24565b8101031262000bbf579651929693949093909290919085620016fd62001c13565b503d62001c77565b6040513d8c823e3d90fd5b508781813d831162001ce5575b62001cd0818362012b24565b8101031262000bbf5762001bac905162001b9e565b503d62001cc4565b6040513d8b823e3d90fd5b8581813d831162001d20575b62001d10818362012b24565b8101031262000bbf575162001b2d565b503d62001d04565b6040513d89823e3d90fd5b508581813d831162001d61575b62001d4c818362012b24565b8101031262000bbf57620019e89051620019dc565b503d62001d40565b508481813d831162001d97575b62001d82818362012b24565b8101031262000bbf576200197690516200196a565b503d62001d76565b6040513d88823e3d90fd5b8281813d831162001dd2575b62001dc2818362012b24565b8101031262000bbf5751620018fc565b503d62001db6565b6040513d86823e3d90fd5b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b81811062001e795762001e758562001e688187038262012b24565b6040519182918262012886565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920162001e4d565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200050857737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200050857806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f486aa307000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000919576200206f575b5062000ee49073ffffffffffffffffffffffffffffffffffffffff602c5416602092839160405162001f9d848262012b24565b8481527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835262000a7e6004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b816200207b9162012b24565b6200050857805f62001f6a565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200050857620020f3670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff602c5416602092839160405162000de4848262012b24565b03925af1801562000b8c57620021b1575b506040517fdd9fca12000000000000000000000000000000000000000000000000000000008152816004820152602160248201527f72656d6f76654c69717569646974792077697468206e617469766520746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152818160848186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000b8c5762000b59578280f35b8181813d8311620021d9575b620021c9818362012b24565b8101031262000bbf575162002104565b503d620021bd565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000508576200225662ffffff6200224b73ffffffffffffffffffffffffffffffffffffffff602b541660a06200224362012ce6565b2090620143ce565b5091505016620144a4565b8073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f1157604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762002956575b5073ffffffffffffffffffffffffffffffffffffffff602b5416803b1562000f115781809160c4604051809481937f7e87ce7d000000000000000000000000000000000000000000000000000000008352620023ae6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b623e83e860a48401525af1801562000919576200293d575b50506200240462ffffff620023f973ffffffffffffffffffffffffffffffffffffffff602b541660a06200224362012ce6565b509150501662014529565b73ffffffffffffffffffffffffffffffffffffffff602f54166200251973fffd8963efd1fc6a506488495d951d5263988d2573ffffffffffffffffffffffffffffffffffffffff604051916200245a8362012a93565b8583527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f0602084015216604082015260405190620024988262012ab0565b84825284602083015260209384928660405193620024b7868662012b24565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b40000000000000000000000000000000000000000000000000000000085526004850162012e25565b03925af1801562000b8c576200290d575b5073ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60295416604051907f97e8cd4e00000000000000000000000000000000000000000000000000000000825260048201528281602481855afa801562001dda578490620028d7575b620025ac9150620144a4565b60248273ffffffffffffffffffffffffffffffffffffffff602a541692604051928380927f97e8cd4e0000000000000000000000000000000000000000000000000000000082528660048301525afa90811562001dda578491620028a1575b506200264691620026206200264092620145a5565b73ffffffffffffffffffffffffffffffffffffffff60455416906201498f565b620144a4565b8173ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f1457604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762002888575b505073ffffffffffffffffffffffffffffffffffffffff602b54168173ffffffffffffffffffffffffffffffffffffffff60455416606473ffffffffffffffffffffffffffffffffffffffff602a5416918660405195869485937f8161b874000000000000000000000000000000000000000000000000000000008552600485015260248401528160448401525af1801562000b8c5762002858575b5073ffffffffffffffffffffffffffffffffffffffff602a541690620027b7620027b173ffffffffffffffffffffffffffffffffffffffff60455416846201498f565b620145a5565b8073ffffffffffffffffffffffffffffffffffffffff602b5416926024604051809581937f97e8cd4e00000000000000000000000000000000000000000000000000000000835260048301525afa90811562000b8c57839162002821575b83620016fd83620144a4565b905081813d831162002850575b6200283a818362012b24565b8101031262000bbf57620016fd90515f62002815565b503d6200282e565b8181813d831162002880575b62002870818362012b24565b8101031262000bbf57516200276e565b503d62002864565b81620028949162012b24565b62000f1457815f620026d2565b90508281813d8311620028cf575b620028bb818362012b24565b8101031262000bbf5751620026466200260b565b503d620028af565b508281813d831162002905575b620028f0818362012b24565b8101031262000bbf57620025ac9051620025a0565b503d620028e4565b8181813d831162002935575b62002925818362012b24565b8101031262000bbf57516200252a565b503d62002919565b81620029499162012b24565b6200050857805f620023c6565b81620029629162012b24565b6200050857805f620022e2565b50346200050857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200050857604051620029ae8162012ab0565b60018152816020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f1457816040517f491cc7c200000000000000000000000000000000000000000000000000000000815281818062002a2360048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620009195762002c72575b505062000ee460a062002a5c62012c63565b2073ffffffffffffffffffffffffffffffffffffffff602f541680917f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6040518062002b218190610bb860a060c08401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8152606260208201526bfffffffffffff8ddc5b7dbb06040820152670de0b6b3a764000060608201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808201520152565b0390a3602092839162002c5d60646040519362002b3f868662012b24565b8885527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b400000000000000000000000000000000000000000000000000000000855262002c126004860173ffffffffffffffffffffffffffffffffffffffff603954168152603a5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603b5416910152565b60265460ff16151560a486015260275460c486015260285473ffffffffffffffffffffffffffffffffffffffff1660e486015280511515610104860152602001511515610124850152565b610160610144840152610164830190620128d7565b8162002c7e9162012b24565b62000f1457815f62002a4a565b5034620005085760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620005085760043573ffffffffffffffffffffffffffffffffffffffff811680910362000f145773ffffffffffffffffffffffffffffffffffffffff9062002d169073fffd8963efd1fc6a506488495d951d5263988d259062014b4b565b16816040517f3ebf73b400000000000000000000000000000000000000000000000000000000815281818062002da76004820160809060208152602160208201527f456d70747954657374486f6f6b732e736f6c3a456d70747954657374486f6f6b60408201527f730000000000000000000000000000000000000000000000000000000000000060608201520190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200091957829162003986575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f14578162002e2791604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083526004830162012bcb565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000919576200396d575b50506040516107048082019082821067ffffffffffffffff831117620039405791809185936201f9e38339039082f08015620039335773ffffffffffffffffffffffffffffffffffffffff62002ea5911662012ba1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000f14578162002efb91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083526004830162012c04565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000919576200391a575b50506103003b1562000f1457816040517fd784d426000000000000000000000000000000000000000000000000000000008152613fff60048201528181602481836103005af18015620009195762003901575b505073ffffffffffffffffffffffffffffffffffffffff602954169073ffffffffffffffffffffffffffffffffffffffff602a54169162002fb562013eac565b506040519062002fc58262012b07565b81526020810192835260408101610bb881526060820191603c83528560206080830195610300875260a084205060c473ffffffffffffffffffffffffffffffffffffffff602b54169160405194859384927f6276cbbe00000000000000000000000000000000000000000000000000000000845262003091600485018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a48401525af1801562001d2857620038b3575b5091620031ab62ffffff620031fb936200316073ffffffffffffffffffffffffffffffffffffffff6200323e996200311d82809b9a511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006036541617603655565b511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755565b51167fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff00000000000000000000000000000000000000006037549260a01b16911617603755565b5160020b7fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff6037549160b81b79ffffff000000000000000000000000000000000000000000000016911617603755565b511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006038541617603855565b73ffffffffffffffffffffffffffffffffffffffff602c5416816020918183620032716040519362001817838662012b24565b03925af1801562000b8c576200387f575b50826200336073ffffffffffffffffffffffffffffffffffffffff602c5416604051620032b0848262012b24565b8581528436858301376040519586809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835262000eb66004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b03925af191821562001dda57849262003847575b506200357c6200345b916200354f73ffffffffffffffffffffffffffffffffffffffff602c54169162003488604051620033af898262012b24565b89815282368a830137604051968791868b8401526200341a60408401603673ffffffffffffffffffffffffffffffffffffffff60026080928281541685526001810154838116602087015262ffffff8160a01c16604087015260b81c820b6060860152015416910152565b602354600281810b60e086015260189190911c900b6101008401526024546101208401526025546101408401525b61016080840152610180830190620128d7565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810187528662012b24565b6040519062003498888362012b24565b8882523688830137604051958693888501526200350160408501603673ffffffffffffffffffffffffffffffffffffffff60026080928281541685526001810154838116602087015262ffffff8160a01c16604087015260b81c820b6060860152015416910152565b602354600281810b60e087015260189190911c900b6101008501526024546101208501526025546101408501525b610160840152876101808401526101a0808401526101c0830190620128d7565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528362012b24565b6040517f5837e5b7000000000000000000000000000000000000000000000000