@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 204 kB
JSON
{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"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":"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_fuzz_swap","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"lpFee","type":"uint24","internalType":"uint24"},{"name":"protocolFee0","type":"uint16","internalType":"uint16"},{"name":"protocolFee1","type":"uint16","internalType":"uint16"},{"name":"params","type":"tuple","internalType":"struct Pool.SwapParams","components":[{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"},{"name":"lpFeeOverride","type":"uint24","internalType":"uint24"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_tickSpacingToMaxLiquidityPerTick","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_modifyLiquidity","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"lpFee","type":"uint24","internalType":"uint24"},{"name":"params","type":"tuple","internalType":"struct Pool.ModifyLiquidityParams","components":[{"name":"owner","type":"address","internalType":"address"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int128","internalType":"int128"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_pool_initialize","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"swapFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"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":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561580090816100348239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081631ed7831c14611804575080632ade3880146115d65780633e5e3c231461152e5780633f7286f4146114865780634b9930121461143e57806366d9a9a0146112e1578063800208e1146111ee57806385226c8114611145578063916a17c61461106f578063b0464fdc14610f99578063b5508aa914610ef0578063ba414fa614610eae578063c63fcdb014610c09578063e20c9f7114610b50578063ef87a6ec146101115763fa7626d4146100ce575f80fd5b3461010e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010e57602060ff601f54166040519015158152f35b80fd5b503461010e576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010e5761014a61193a565b9061015361195d565b60443561ffff8116809103610b4c576064359361ffff8516809503610b485760a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610b48576040519260a084019584871067ffffffffffffffff881117610b1b578596604096959652608435865260a435908160020b92838303610b17576020880192835260c435928315158403610b13576040890193845260e4359473ffffffffffffffffffffffffffffffffffffffff86168603610b0f5760608a01958652610104359262ffffff84168403610b0b5762ffffff61025d620f42408c838f956102ff9861025261ffff9960806102f89a019c8d5261381b565b60020b905216614e88565b5f806102aa6102dc61026d6137e0565b6040519283917fb60e72cc0000000000000000000000000000000000000000000000000000000060208401526040602484015260648301906118f7565b866044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611a62565b6020815191016a636f6e736f6c652e6c6f675afa501698613ede565b1692613ede565b9561036c8361f00089600c1b161796826040519161031c83611a0d565b3083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88602084015260786040840152670de0b6b3a76400006060840152603c60808401528b60a08401526122de565b602054956103818760b81c62ffffff166133c3565b6103d779ffffff00000000000000000000000000000000000000000000008260b81b16887fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1617918260b81c62ffffff16613443565b60205583511592831597885f14610aff5750915b5162400000811615610af85762bfffff915016905b8161ffff8216610ad5579050905b885191888312159081610ac3575b50156104f0575050505050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104e157816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f96206246000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104e5576104cc575b50506104c590613f45565b5050505080f35b816104d691611a62565b6104e157815f6104ba565b5080fd5b6040513d84823e3d90fd5b62ffffff1695620f42408711156105cf57505050505050604051907f14002113000000000000000000000000000000000000000000000000000000006020830152602482015260248152610545604482611a62565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104e157816105a091604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104e5576104cc5750506104c590613f45565b809192939495965090610aba575b1561078a575050815173ffffffffffffffffffffffffffffffffffffffff9384169316905082811061068d5750516040517f7c9c6e8f00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529116604482015261054581606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611a62565b9150506401000276a381106106a3575b50505080f35b604051907f9e4d7cc70000000000000000000000000000000000000000000000000000000060208301526024820152602481526106e1604482611a62565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104e1578161073c91604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104e557610775575b505061076c90613f45565b5083915061069d565b8161077f91611a62565b6104e157815f610761565b81610ab0575b501561083b5750805173ffffffffffffffffffffffffffffffffffffffff92831692168281116108165750516040517f7c9c6e8f00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9283166024820152911660448201526105458160648101610661565b91505073fffd8963efd1fc6a506488495d951d5263988d268110156106a35750505080f35b9091929361084881613f45565b5050505051155f1461095157505060205473ffffffffffffffffffffffffffffffffffffffff169060405161087e604082611a62565b601481527f616d6f756e74537065636966696564203d3d20300000000000000000000000006020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561094c57839161091373ffffffffffffffffffffffffffffffffffffffff9260405195869485947f88b44c850000000000000000000000000000000000000000000000000000000086521660048501614b87565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104e55761093b57505080f35b8161094591611a62565b61010e5780f35b505050fd5b5190915015610a055773ffffffffffffffffffffffffffffffffffffffff60205481169151169060405191610987604084611a62565b600a83527f7a65726f466f724f6e65000000000000000000000000000000000000000000006020840152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561094c57839161091360405194859384937fe25242c000000000000000000000000000000000000000000000000000000000855260048501614b87565b73ffffffffffffffffffffffffffffffffffffffff60205481169151169060405191610a32604084611a62565b600a83527f6f6e65466f725a65726f000000000000000000000000000000000000000000006020840152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561094c57839161091360405194859384937fd17d4b0d00000000000000000000000000000000000000000000000000000000855260048501614b87565b905015155f610790565b508015156105dd565b620f4240915062ffffff16145f61041c565b610af291610fff62ffffff91169116620f42408183020491010390565b9061040e565b5090610400565b61ffff915016916103eb565b8980fd5b8880fd5b8780fd5b8680fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b503461010e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010e5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610bdd57610bd985610bcd81870382611a62565b604051918291826118a8565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610bb6565b5034610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e50576004358060020b809103610e5057610c509061381b565b60020b8015610e5457610c8581807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618056132fd565b610c948280620d89e8056132fd565b9060020b9060020b03627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610e815760020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821416610e815762ffffff8260019205160162ffffff8111610e815762ffffff16908115610e5457610daa9060019060020b5f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e80503016fffffffffffffffffffffffffffffffff0490565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e50576fffffffffffffffffffffffffffffffff9081604051937fa8d4d1d900000000000000000000000000000000000000000000000000000000855281041660048401521660248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610e4557610e37575080f35b610e4391505f90611a62565b005b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e50576020610ee6613224565b6040519015158152f35b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601954610f2a81611bc4565b90610f386040519283611a62565b80825260195f9081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610f7c5760405180610bd98782611aa3565b600160208192610f8b85611bdc565b815201920192019190610f67565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601c54610fd381611bc4565b90610fe16040519283611a62565b80825260208201601c5f527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2115f915b8383106110255760405180610bd98782611b20565b60026020600192604051611038816119c4565b73ffffffffffffffffffffffffffffffffffffffff865416815261105d858701612028565b83820152815201920192019190611010565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601d546110a981611bc4565b906110b76040519283611a62565b80825260208201601d5f527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f5f915b8383106110fb5760405180610bd98782611b20565b6002602060019260405161110e816119c4565b73ffffffffffffffffffffffffffffffffffffffff8654168152611133858701612028565b838201528152019201920191906110e6565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601a5461117f81611bc4565b9061118d6040519283611a62565b808252601a5f9081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106111d15760405180610bd98782611aa3565b6001602081926111e085611bdc565b8152019201920191906111bc565b34610e50576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761122661193a565b61122e61195d565b60c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc360112610e50576040519061126582611a0d565b60443573ffffffffffffffffffffffffffffffffffffffff81168103610e505782526064358060020b8103610e505760208301526084358060020b8103610e5057604083015260a43580600f0b8103610e5057606083015260c435928360020b8403610e5057610e4393608084015260e43560a08401526122de565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601b5461131b81611bc4565b906113296040519283611a62565b808252602082019081601b5f527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc15f915b83831061140357848660405191829160208301906020845251809152604083019060408160051b85010192915f905b82821061139857505050500390f35b919360206113f3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836113e383516040845260408401906118f7565b920151908481840391015261196f565b9601920192018594939192611389565b60026020600192604051611416816119c4565b61141f86611bdc565b815261142c858701612028565b8382015281520192019201919061135a565b34610e505760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610e4361147861193a565b61148061195d565b90611cdf565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505760405180602060175491828152019060175f527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15905f5b81811061150257610bd985610bcd81870382611a62565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016114eb565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505760405180602060185491828152019060185f527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e905f5b8181106115aa57610bd985610bcd81870382611a62565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611593565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601e5461161081611bc4565b9061161e6040519283611a62565b808252602082019081601e5f527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3505f915b83831061176c57848660405191829160208301906020845251809152604083019060408160051b85010192915f905b82821061168d57505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09082030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b8501019401925f5b828110611723575050505050602080600192960192019201859493919261167e565b909192939460208061175f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516118f7565b9701950193929101611701565b604051611778816119c4565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546117a181611bc4565b916117af6040519384611a62565b81835260208301905f5260205f20905f905b8382106117e757505050506001928260209283600295015281520192019201919061164f565b6001602081926117f686611bdc565b8152019301910190916117c1565b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057601654808252602082019060165f527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289905f5b81811061187c57610bd985610bcd81870382611a62565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611865565b60206040818301928281528451809452019201905f5b8181106118cb5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016118be565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610e5057565b6024359062ffffff82168203610e5057565b90602080835192838152019201905f5b81811061198c5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161197f565b6040810190811067ffffffffffffffff8211176119e057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176119e057604052565b6060810190811067ffffffffffffffff8211176119e057604052565b610100810190811067ffffffffffffffff8211176119e057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176119e057604052565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611ad557505050505090565b9091929394602080611b11837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516118f7565b97019301930191939290611ac6565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611b5257505050505090565b9091929394602080611bb5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061196f565b97019301930191939290611b43565b67ffffffffffffffff81116119e05760051b60200190565b90604051915f8154908160011c9260018316928315611cd5575b602085108414611ca8578487528693908115611c685750600114611c24575b50611c2292500383611a62565b565b90505f9291925260205f20905f915b818310611c4c575050906020611c22928201015f611c15565b6020919350806001915483858901015201910190918492611c33565b60209350611c229592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f611c15565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f1693611bf6565b9073ffffffffffffffffffffffffffffffffffffffff8216916401000276a38310801561200a575b15611de857604051927f61487524000000000000000000000000000000000000000000000000000000006020850152602484015260248352611d4a604484611a62565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e50575f611da593604051809581927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1928315610e4557611dd593611dd8575b50613314565b50565b5f611de291611a62565b5f611dcf565b90611df39082613314565b50611e38602054611e1b5f948273ffffffffffffffffffffffffffffffffffffffff16613443565b611e2c8160b81c62ffffff166133c3565b60a01c60020b916134b9565b60020b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e5057604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825282600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610e4557611ff5575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104e1576040517f3e914080000000000000000000000000000000000000000000000000000000008152816004820152620d89e860248201528281604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611fea57908391611fd5575b50507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27617737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b4c57604051917f5a362d45000000000000000000000000000000000000000000000000000000008352600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104e557611fc3575050565b611fce828092611a62565b61010e5750565b81611fdf91611a62565b6104e157815f611f2a565b6040513d85823e3d90fd5b6120029192505f90611a62565b5f905f611eaf565b5073fffd8963efd1fc6a506488495d951d5263988d26831015611d07565b90604051918281549182825260208201905f5260205f20925f905b80600783011061223f57611c22945491818110612209575b8181106121d3575b81811061219d575b818110612167575b818110612131575b8181106120fb575b8181106120c6575b10612099575b500383611a62565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f612091565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b16815201930161208b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612083565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161207b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612073565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161206b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612063565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161205b565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612043565b9060020b908115610e545760020b0790565b608083016123008151936122f55f9560020b61381b565b60020b835283611cdf565b6020840193845160020b926040820193845160020b808212155f14612bb4575050855184516040517fc4433ed5000000000000000000000000000000000000000000000000000000006020820152600292830b6024820152910b6044820152905061236e8160648101610661565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612bb057846123c991604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612ba557908591612b90575b50505b3081526060810151600f0b945160020b925160020b9384841215612b59577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276188412612b2d57620d89e88513612b0157604051906080820182811067ffffffffffffffff821117612ad457604052808252602082019281845260408301938285526060840195838752891591821597886127c7575b5050506124a08760020b5f52602460205260405f2090565b916124b68960020b5f52602460205260405f2090565b8960205460a01c60020b8a81125f146127795750506002806001860154600184015490039501549101549003905b60a073ffffffffffffffffffffffffffffffffffffffff825116910151906040519160268301528a6006830152896003830152815284603a600c83012091816040820152816020820152528452602660205260408420918a6fffffffffffffffffffffffffffffffff845416915f14612727575080156126ff57916125949161259a94935b600183019461258c60026125808489548503615066565b95019283548503615066565b955555614d7d565b50614d7d565b50861261269e575b50506125ad57505050565b60205473ffffffffffffffffffffffffffffffffffffffff81169060a01c60020b828112156125fd575050916125f8916125f26125ec611dd595613b6c565b91613b6c565b90614e06565b614df8565b9280919293125f14612683579161264b6125f88580946126466126406125f86fffffffffffffffffffffffffffffffff9a61263a6126579b613b6c565b85614e06565b95613b6c565b614d9b565b50506023548316614e4d565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000006023541617602355565b611dd59391506126986125ec6125f894613b6c565b90614d9b565b516126d8575b516126b1575b5f806125a2565b6126d38360020b5f5260246020525f6002604082208281558260018201550155565b6126aa565b6126fa8360020b5f5260246020525f6002604082208281558260018201550155565b6126a4565b6004857faefeb924000000000000000000000000000000000000000000000000000000008152fd5b91816fffffffffffffffffffffffffffffffff61274c6125949561259a989795614e4d565b167fffffffffffffffffffffffffffffffff00000000000000000000000000000000845416178355612569565b9194911261279e576002806001860154600184015490039501549101549003906124e4565b9260026021546001860154900360018301549003948160225491015490039101549003906124e4565b8986526024602052898c604088208054916fffffffffffffffffffffffffffffffff8316926fffffffffffffffffffffffffffffffff6128078386614e4d565b16931594858515141595612aa9575b5060801d600f0b017fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff821317612a515760801b82179055835287528a865260246020528a8c604088208054916fffffffffffffffffffffffffffffffff8316926fffffffffffffffffffffffffffffffff6128a48386614e4d565b16931594858515141595612a7e575b5060801d600f0b036f7fffffffffffffffffffffffffffffff81137fffffffffffffffffffffffffffffffff80000000000000000000000000000000821217612a515760801b8217905582528852858c1215612948575b50508451612935575b8551612921575b8080612488565b61292f905160020b89614d32565b5f61291a565b612943815160020b89614d32565b612913565b6fffffffffffffffffffffffffffffffff806129ce855160020b60019060020b5f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e80503016fffffffffffffffffffffffffffffffff0490565b9351169216809211612a2557516fffffffffffffffffffffffffffffffff16116129f9575f8061290a565b6024848a7fb8e3c385000000000000000000000000000000000000000000000000000000008252600452fd5b6024868b7fb8e3c385000000000000000000000000000000000000000000000000000000008252600452fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60205460a01c60020b1215612a94575b8f6128b3565b60215460018401556022546002840155612a8e565b60205460a01c60020b1215612abf575b8e612816565b60215460018401556022546002840155612ab9565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80857f1ad777f80000000000000000000000000000000000000000000000000000000060249352600452fd5b80847fd5e2f7ab0000000000000000000000000000000000000000000000000000000060249352600452fd5b60448486604051917fc4433ed500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b81612b9a91611a62565b610b4857835f6123f1565b6040513d87823e3d90fd5b8480fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618821215612cc257505050845160020b604051907fd5e2f7ab000000000000000000000000000000000000000000000000000000006020830152602482015260248152612c22604482611a62565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612bb05784612c7d91604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612ba557908591612cad575b50505b6123f4565b81612cb791611a62565b610b4857835f612ca5565b620d89e81215612d11575050825160020b604051907f1ad777f8000000000000000000000000000000000000000000000000000000006020830152602482015260248152612c22604482611a62565b60608301908151600f0b5f81125f14612dc05750505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b48576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f93dafdf1000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612ba557908591612cad5750506123f4565b80612e615750505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b48576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faefeb924000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612ba557908591612cad5750506123f4565b855160020b906fffffffffffffffffffffffffffffffff612ee88360019060020b5f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e80503016fffffffffffffffffffffffffffffffff0490565b16600f0b1215612f395750505050845160020b604051907fb8e3c385000000000000000000000000000000000000000000000000000000006020830152602482015260248152612c22604482611a62565b612f42916122cc565b60020b15612f97575050845182516040517fd4d8f3e6000000000000000000000000000000000000000000000000000000006020820152600292830b6024820152910b6044820152612c228160648101610661565b612faa855160020b855160020b906122cc565b60020b15612fff575050825182516040517fd4d8f3e6000000000000000000000000000000000000000000000000000000006020820152600292830b6024820152910b6044820152612c228160648101610661565b61300c875160020b613b6c565b9161301a865160020b613b6c565b91516fffffffffffffffffffffffffffffffff1691809184915f905f9673ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821611613219575b505073ffffffffffffffffffffffffffffffffffffffff82811690841681116131a957505050916130ad916fffffffffffffffffffffffffffffffff93614cc4565b1190811561318f575b5015612ca8576040517f93dafdf1000000000000000000000000000000000000000000000000000000006020820152600481526130f4602482611a62565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e50575f61314f91604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906118f7565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610e455761317a575b506123f4565b6131879194505f90611a62565b5f925f613174565b6fffffffffffffffffffffffffffffffff9150115f6130b6565b92955090929173ffffffffffffffffffffffffffffffffffffffff831611156131fa575091816131ee826fffffffffffffffffffffffffffffffff956131f495614cc4565b94614c77565b916130ad565b936131f49250906fffffffffffffffffffffffffffffffff9391614c77565b945092505f8061306b565b60085460ff1680156132335790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610e45575f916132cb575b50151590565b90506020813d6020116132f5575b816132e660209383611a62565b81010312610e5057515f6132c5565b3d91506132d9565b9060020b9060020b02908160020b918203610e8157565b91909160205473ffffffffffffffffffffffffffffffffffffffff1661339b5773ffffffffffffffffffffffffffffffffffffffff7cffffff0000000000000000000000000000000000000000000000000000613370836134b9565b9460d01b16911676ffffff00000000000000000000000000000000000000008460a01b161717602055565b7f7983c051000000000000000000000000000000000000000000000000000000005f5260045ffd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e5057604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201525f60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610e45576134395750565b5f611c2291611a62565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e5057604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610e45576134395750565b73fffd8963efd1fc6a506488495d951d516396168273ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d8301161161379e5777ffffffffffffffffffffffffffffffffffffffff000000008160201b168060ff61353683614ba3565b16916080831061379257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8182011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c67800000000000000016907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160401b1717171717171717171717171717693627a301d71055774c85027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f1461374f575090505b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff61378384613b6c565b161161378d575090565b905090565b905081607f031b613566565b73ffffffffffffffffffffffffffffffffffffffff907f61487524000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b604051906137ef604083611a62565b600c82527f426f756e6420726573756c7400000000000000000000000000000000000000006020830152565b5f811215613b3957197f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610e81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610e81576138e4905b7f80000000000000000000000000000000000000000000000000000000000000017f8000000000000000000000000000000000000000000000000000000000007fff91614e88565b7f8000000000000000000000000000000000000000000000000000000000000000811015613b09577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610e81571960018101809111610e8157905b81604051907fa322c40e00000000000000000000000000000000000000000000000000000000825260048201525f81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610e45575f91613a54575b505f613a0d613a3d82936106616139cf6137e0565b916040519485937f4b5c42770000000000000000000000000000000000000000000000000000000060208601526040602486015260648501906118f7565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8483030160448501526118f7565b6020815191016a636f6e736f6c652e6c6f675afa50565b90503d805f833e613a658183611a62565b810190602081830312610e505780519067ffffffffffffffff8211610e5057019080601f83011215610e5057815167ffffffffffffffff81116119e05760405191613ad8601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184611a62565b81835260208285010111610e5057613a3d5f939284602084613a0d95828498018386015e83010152935050506139ba565b7f80000000000000000000000000000000000000000000000000000000000000008101908111610e815790613963565b7f80000000000000000000000000000000000000000000000000000000000000008101809111610e81576138e49061389c565b60020b908160ff1d82810118620d89e88111613eb25763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116613e96575b60048116613e7a575b60088116613e5e575b60108116613e42575b60208116613e26575b60408116613e0a575b60808116613dee575b6101008116613dd2575b6102008116613db6575b6104008116613d9a575b6108008116613d7e575b6110008116613d62575b6120008116613d46575b6140008116613d2a575b6180008116613d0e575b620100008116613cf2575b620200008116613cd7575b620400008116613cbc575b6208000016613ca3575b5f12613c7c575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04613c75565b6b048a170391f7dc42444e8fa290910260801c90613c6e565b6d2216e584f5fa1ea926041bedfe9890920260801c91613c64565b916e5d6af8dedb81196699c329225ee6040260801c91613c59565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91613c4e565b916f31be135f97d08fd981231505542fcfa60260801c91613c43565b916f70d869a156d2a1b890bb3df62baf32f70260801c91613c39565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91613c2f565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91613c25565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91613c1b565b916ff3392b0822b70005940c7a398e4b70f30260801c91613c11565b916ff987a7253ac413176f2b074cf7815e540260801c91613c07565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91613bfd565b916ffe5dee046a99a2a811c461f1969c30530260801c91613bf3565b916fff2ea16466c96a3843ec78b326b528610260801c91613bea565b916fff973b41fa98c081472e6896dfb254c00260801c91613be1565b916fffcb9843d60f6159c9db58835c9266440260801c91613bd8565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91613bcf565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91613bc6565b916ffff97272373d413259a46990580e213a0260801c91613bbd565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6103e85f613eeb92614e88565b905f80613efc613a3d61026d6137e0565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611a62565b91908201809211610e8157565b8115610e54570490565b604051915f613f5384611a29565b5f845260208401915f835260408501945f86528095602054946040870151159687155f14614b7957610fff8760b81c16945b8151925f948973ffffffffffffffffffffffffffffffffffffffff16918288528a60a01c60020b90526fffffffffffffffffffffffffffffffff602354169052608083015162400000811615155f14614b6a5762bfffff16620f42408111614b3f575b61ffff8816614b20575b8096620f424062ffffff83161015614aef575b845115614ada57505089614a7a57606083019073ffffffffffffffffffffffffffffffffffffffff82511681811015614a435750505173ffffffffffffffffffffffffffffffffffffffff166401000276a3811115614a1857505b6040519761406d89611a45565b5f89525f60208a01525f60408a01525f60608a01525f60808a01525f60a08a01525f60c08a015289155f14614a0c57602154949390945b60e08a01525b801580156149d2575b6148985773ffffffffffffffffffffffffffffffffffffffff8b5116895260208b015160020b602084015160020b90815f818307129105038b155f1461473e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276189160ff8216918060020b60081d60010b5f52602560205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8460ff031c9054169283151593845f1461472c579061417060ff92614ba3565b90031660020b900360020b0260020b5b905b151560408c015260020b8060208c01521315614701575b620d89e860208a015160020b12156146f3575b89868c8b6fffffffffffffffffffffffffffffffff6040600173ffffffffffffffffffffffffffffffffffffffff6141ea602086015160020b613b6c565b1680606086015273ffffffffffffffffffffffffffffffffffffffff8651169773ffffffffffffffffffffffffffffffffffffffff60608d01511692839115168183101891180218930151169373ffffffffffffffffffffffffffffffffffffffff8316811015905f87125f1461461e5762ffffff8516620f42400361427281895f036150e8565b94831561460d57614284888483615493565b955b8681106145a557509660c0929173ffffffffffffffffffffffffffffffffffffffff98978891620f424062ffffff8316145f14614591575050865b945b1561458357916142d292615345565b925b015260a08d015260808c0152168b525f8351135f146145455760a0890151905f821261451d57039261430f60808a015160c08b015190613f2e565b5f811261451d578103908113600116610e8157935b61ffff87166144d5575b6fffffffffffffffffffffffffffffffff60408c015116806144bb575b5073ffffffffffffffffffffffffffffffffffffffff8b511673ffffffffffffffffffffffffffffffffffffffff60608b01511681145f1461447f575060408901516143e2575b896143d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208a015160020b0160020b5b60020b60208c01525b93926140aa565b602089015160020b6143c5565b8961445e576fffffffffffffffffffffffffffffffff61444560e08b01516022545b60208d015160020b5f52602460205260405f2091600183019081549003905560028201908154900390555460801d8d8d15614450575b604001518316614e4d565b1660408c0152614392565b5f91909103600f0b9061443a565b6fffffffffffffffffffffffffffffffff61444560215460e08c0151614404565b73ffffffffffffffffffffffffffffffffffffffff8a511681036144a4575b506143ce565b6144ad906134b9565b60020b60208c01525f61449e565b60c08a015160801b0460e08a01510160e08a01525f61434b565b9662ffffff861661ffff8816036145005760c0890151905b8160c08b01510360c08b0152019661432e565b620f424060808a015161ffff89169060c08c0151010204906144ed565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b608089015160c08a015101905f821261451d57019260a0890151905f821261451d575f8282019283129112908015821691151617610e815793614324565b61458c926153e0565b6142d2565b62ffffff6145a092168961553e565b6142c1565b9650505091509150829184158215176146005760c08e9273ffffffffffffffffffffffffffffffffffffffff96835f146145f0576145e48782846155dd565b80978a015f03946142c3565b6145fb878284615764565b6145e4565b634f2461b85f526004601cfd5b614618888285615385565b95614286565b91509250825f146146e257614634848284615345565b915b828610614697579373ffffffffffffffffffffffffffffffffffffffff9480945b15614688579161466692615493565b905b8c60c061468262ffffff8d16620f4240819003908661553e565b916142d4565b61469192615385565b90614668565b5084915080158415176146005773ffffffffffffffffffffffffffffffffffffffff9383156146d2576146cb868284615671565b8094614657565b6146dd868284615567565b6146cb565b6146ed8483836153e0565b91614636565b620d89e860208a01526141ac565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860208a0152614199565b5060020b900360020b0260020b614180565b6001018060020b60081d60010b5f52602560205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160ff84161b011990541691821591821592835f1461485857610e505760ff847ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618955f03166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f85851693831c63d76453e004161a17031660020b9060020b0160020b0260020b5b90614182565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618935060ff81811681031660020b9060020b0160020b0260020b614852565b9360e0929598919a9799939650602088015160a01b76ffffff0000000000000000000000000000000000000000167fffffffffffffffffff000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8a5116921617176020556fffffffffffffffffffffffffffffffff602354166fffffffffffffffffffffffffffffffff6040890151168091036149a3575b5082156149995701516022555b825190155f82121461498357506149616149699293614df8565b925103614df8565b6fffffffffffffffffffffffffffffffff169060801b1793565b6149699250906149939103614df8565b91614df8565b0151602155614947565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000060235416176023555f61493a565b5073ffffffffffffffffffffffffffffffffffffffff8b511673ffffffffffffffffffffffffffffffffffffffff606085015116146140b3565b602254949390946140a4565b7f9e4d7cc7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f7c9c6e8f00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b606083019073ffffffffffffffffffffffffffffffffffffffff82511681811115614a435750505173ffffffffffffffffffffffffffffffffffffffff1673fffd8963efd1fc6a506488495d951d5263988d26811015614a185750614060565b995099505098505050505050505f925f929190565b5f85511315614005577f96206246000000000000000000000000000000000000000000000000000000005f5260045ffd5b620f424062ffffff909116610fff891681810292909204910103613ff2565b7f14002113000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b508860d01c62ffffff16613fe8565b610fff8760c41c1694613f85565b61374c93926060928252602082015281604082015201906118f7565b8015610e50577f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b91908203918211610e8157565b9073ffffffffffffffffffffffffffffffffffffffff8091169116039073ffffffffffffffffffffffffffffffffffffffff8211610e8157565b73ffffffffffffffffffffffffffffffffffffffff614cb66fffffffffffffffffffffffffffffffff9261374c959483811684831611614cbe57614c3d565b169116615173565b90614c3d565b90614d2461374c9373ffffffffffffffffffffffffffffffffffffffff9283811684861611614d2c575b7bffffffffffffffffffffffffffffffff0000000000000000000000008480614d178885614c3d565b1692169260601b166152a6565b911690613f3b565b93614cee565b60020b9060020b90818107614d5f57058060081d5f526025602052600160ff60405f2092161b8154189055565b601c906044926040519163d4d8f3e683526020830152604082015201fd5b6f8000000000000000000000000000000081101561451d57600f0b90565b905f83600f0b125f14614dd057614dc6925f036fffffffffffffffffffffffffffffffff1691615345565b5f811261451d5790565b614dec926fffffffffffffffffffffffffffffffff1691615385565b5f811261451d575f0390565b9081600f0b91820361451d57565b905f83600f0b125f14614e3157614dc6925f036fffffffffffffffffffffffffffffffff16916153e0565b614dec926fffffffffffffffffffffffffffffffff1691615493565b906fffffffffffffffffffffffffffffffff90600f0b911601908160801c614e7157565b6393dafdf15f526004601cfd5b8115610e54570690565b5f90838311614fe25782811091821580614fd8575b614fd057614eab8486614c30565b9260018401809411610e8157600383111580614fc7575b614fb8577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580614fae575b614f9d5785831115614f5457505090614f0c84614f1193614c30565b614e7e565b908115614f4f57614f229250613f2e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610e815790565b505090565b959492919095614f65575b50505050565b83949550614f0c90614f779394614c30565b908115614f4f57614f889250614c30565b60018101809111610e8157905f808080614f5f565b5050905061374c9291501990614c30565b5082198411614ef0565b505091905061374c9250613f2e565b50828411614ec2565b509250505090565b5084821115614e9d565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393847001000000000000000000000000000000001115610e5057146150df57700100000000000000000