@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 222 kB
JSON
{"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":"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_collectProtocolFees_revertsWithInvalidCaller","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collectProtocolFees_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collectProtocolFees","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"feesAccrued","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_setProtocolFee","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"protocolFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_updateProtocolFees","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startingAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_setProtocolFeeController_revertsWithNotAuthorized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_setProtocolFeeController_succeedsNoRevert","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_setProtocolFee_revertsWithInvalidCaller","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_setProtocolFee_revertsWithInvalidFee","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_setProtocolFee_succeeds_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_updateProtocolFees_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ProtocolFeeControllerUpdated","inputs":[{"name":"feeController","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"protocolFee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"protocolFee","type":"uint24","indexed":false,"internalType":"uint24"}],"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":"0x60806040523461016257600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610166565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610166565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b0382111761014e5760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b03179091555161683f90816101868239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b0381118382101761014e5760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081621c480014613c1f575080630107751d14613687578063045ee99c146133a35780630a9254e414612daa5780631ed7831c14612d015780631fa58791146129d55780632ade3880146127a957806339cd2013146127485780633e5e3c231461269f5780633f7286f4146125f65780634a34338914612163578063542524dd1461211657806354a89cef14611fbe57806366d9a9a014611e6357806385226c8114611dbb5780638bd7d3af14611b735780638d9c624314611451578063916a17c61461137c57806393ad73ed14611317578063944b94c614611009578063b0464fdc14610f34578063b1a73b8a14610ecc578063b5508aa914610e24578063ba414fa614610de1578063c7b8e15d14610da3578063cff8f458146107b4578063defcbca01461025e578063e20c9f71146101a55763fa7626d40361000f57346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257602060ff601f54166040519015158152f35b80fd5b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106102325761022e856102228187038261416e565b60405191829182613ede565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161020b565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2578073ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff602a5416604051916102cd83614152565b82526020820152610bb86040820152603c606082015281608082015273ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60355416813b156107af5783916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af190811561076557839161079a575b505073ffffffffffffffffffffffffffffffffffffffff60445416803b15610749578260405180927fb0e277b4000000000000000000000000000000000000000000000000000000008252818381600481016c0100000000000000000000000060a060c0830192610423818d73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b015203925af1908115610765578391610785575b505073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561074957604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610765578391610770575b505073ffffffffffffffffffffffffffffffffffffffff60445416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610749576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190525f602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152828160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561076557839161074d575b505060a081207fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f96020604051623e83e88152a273ffffffffffffffffffffffffffffffffffffffff6044541690813b156107495761065f60c484928360405195869485937f7e87ce7d000000000000000000000000000000000000000000000000000000008552600485019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b623e83e860a48401525af1801561072957610734575b50506040517fdd9fca1200000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f7365742070726f746f636f6c2066656500000000000000000000000000000000604482015260208160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610729576106fd575080f35b61071e9060203d602011610722575b610716818361416e565b8101906141db565b5080f35b503d61070c565b6040513d84823e3d90fd5b8161073e9161416e565b6101a257805f610675565b5050fd5b816107579161416e565b61076257815f610584565b50fd5b6040513d85823e3d90fd5b8161077a9161416e565b61076257815f6104c4565b8161078f9161416e565b61076257815f610437565b816107a49161416e565b61076257815f610368565b505050fd5b50346101a2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c08112610d9f5760a0136101a257806040516107f981614152565b610801614042565b815260243573ffffffffffffffffffffffffffffffffffffffff8116810361074957602082015260443562ffffff811681036107495760408201526064358060020b810361074957606082015260843573ffffffffffffffffffffffffffffffffffffffff8116810361074957608082015260a4359062ffffff82168083036107af5773ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60355416813b15610d9b5785916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1908115610d3b578591610d86575b505073ffffffffffffffffffffffffffffffffffffffff60445416803b15610d46578460405180927fb0e277b4000000000000000000000000000000000000000000000000000000008252818381886c0100000000000000000000000060a0600484016109be8160c081019573ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b015203925af1908115610d3b578591610d71575b505073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d4657604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610d3b578591610d5c575b50506103e8610fff8416118015610d4a575b15610bda57604051907fa7abe2f7000000000000000000000000000000000000000000000000000000006020830152602482015260248152610ab460448261416e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107af5783610b0f91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190613f2d565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610bcf578491610bba575b505073ffffffffffffffffffffffffffffffffffffffff6044541691823b156107af57610b96928492836040518096819582947f7e87ce7d000000000000000000000000000000000000000000000000000000008452600484016146bc565b03925af1801561072957610ba957505080f35b81610bb39161416e565b6101a25780f35b81610bc49161416e565b61074957825f610b37565b6040513d86823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff60445416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d46576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190525f602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152848160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610d3b578591610d26575b50507fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f9602060a0842092604051908152a273ffffffffffffffffffffffffffffffffffffffff6044541691823b156107af57610b96928492836040518096819582947f7e87ce7d000000000000000000000000000000000000000000000000000000008452600484016146bc565b81610d309161416e565b6107af57835f610c98565b6040513d87823e3d90fd5b8480fd5b506103e8610fff84600c1c1611610a71565b81610d669161416e565b6107af57835f610a5f565b81610d7b9161416e565b6107af57835f6109d2565b81610d909161416e565b6107af57835f610903565b8580fd5b5080fd5b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760206040516401000276a48152f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576020610e1a6145e3565b6040519015158152f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601954610e5f816141ea565b91610e6d604051938461416e565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610eaf576040518061022e8782613fc5565b600160208192610ebe85614202565b815201920192019190610e9a565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601c54610f6f816141ea565b91610f7d604051938461416e565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610fbf576040518061022e8782614065565b60026020600192604051610fd281614109565b73ffffffffffffffffffffffffffffffffffffffff8654168152610ff7858701614305565b83820152815201920192019190610faa565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2578073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60295416813b156107495782916044839260405194859384927f9612fe6a0000000000000000000000000000000000000000000000000000000084526004840152606460248401525af1801561072957611302575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602954166040517f97e8cd4e000000000000000000000000000000000000000000000000000000008152816004820152602081602481865afa908115610bcf5784916112ca575b5061113c906147ba565b813b156107495782916044839260405194859384927f9612fe6a000000000000000000000000000000000000000000000000000000008452600484015260c860248401525af18015610729576112b5575b5073ffffffffffffffffffffffffffffffffffffffff60445416602073ffffffffffffffffffffffffffffffffffffffff602954166024604051809481937f97e8cd4e00000000000000000000000000000000000000000000000000000000835260048301525afa90811561072957829161127c575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561076257604051907f98296c54000000000000000000000000000000000000000000000000000000008252600482015261012c60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561072957610ba95750f35b9150506020813d6020116112ad575b816112986020938361416e565b810103126112a9578190515f611203565b5f80fd5b3d915061128b565b816112bf9161416e565b6101a257805f61118d565b9350506020833d6020116112fa575b816112e66020938361416e565b810103126112a95761113c84935190611132565b3d91506112d9565b8161130c9161416e565b6101a257805f6110bc565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601d546113b7816141ea565b916113c5604051938461416e565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310611407576040518061022e8782614065565b6002602060019260405161141a81614109565b73ffffffffffffffffffffffffffffffffffffffff865416815261143f858701614305565b838201528152019201920191906113f2565b50346101a25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257611489614042565b602435908260443592809273ffffffffffffffffffffffffffffffffffffffff602954169073ffffffffffffffffffffffffffffffffffffffff60445416926114d284846148e8565b871115737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d9b57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528581602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611a43578691611b5e575b505061155282846148e8565b9261155d85826148e8565b94803b15611b5a576040517f9612fe6a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820189905286908290604490829084905af1908115611a43578691611b45575b505073ffffffffffffffffffffffffffffffffffffffff604454169073ffffffffffffffffffffffffffffffffffffffff60295416906040517f97e8cd4e000000000000000000000000000000000000000000000000000000008152826004820152602081602481875afa8015611b3a578a918991611aff575b509061165091614831565b15611a7c575b5073ffffffffffffffffffffffffffffffffffffffff60355416813b15610d9b5785916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1908115610d3b578591611a67575b505073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d4657604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610d3b578591611a4e575b505085851192836119bb575b73ffffffffffffffffffffffffffffffffffffffff6044541693602073ffffffffffffffffffffffffffffffffffffffff60295416956064604051809981937f8161b87400000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff89169a8b600485015260248401528c60448401525af19586156119b057899661197c575b50156117fb578780f35b60445473ffffffffffffffffffffffffffffffffffffffff169384036118fa5750906118426118479273ffffffffffffffffffffffffffffffffffffffff602954166148e8565b614831565b602073ffffffffffffffffffffffffffffffffffffffff602954166024604051809481937f97e8cd4e00000000000000000000000000000000000000000000000000000000835260048301525afa908115610d3b5785916118c6575b50611842906118b5846118bb966145a9565b90614831565b5f8080808080808780f35b90506020813d6020116118f2575b816118e16020938361416e565b810103126112a957516118bb6118a3565b3d91506118d4565b9161191e73ffffffffffffffffffffffffffffffffffffffff6029541692836148e8565b86820180921161194f576119448561194a959461193f6118b5958b95614831565b6148e8565b926145a9565b611847565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9095506020813d6020116119a8575b816119986020938361416e565b810103126112a95751945f6117f1565b3d915061198b565b6040513d8b823e3d90fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d46576040517ff4844814000000000000000000000000000000000000000000000000000000008152858160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115611a43578691611a2e575b5050611756565b81611a389161416e565b610d4657845f611a27565b6040513d88823e3d90fd5b81611a589161416e565b611a6357835f61174a565b8380fd5b81611a719161416e565b611a6357835f6116bd565b909550604051907f97e8cd4e0000000000000000000000000000000000000000000000000000000082526004820152602081602481895afa908115610d3b578591611aca575b50945f611656565b9450506020843d602011611af7575b81611ae66020938361416e565b810103126112a9578693515f611ac2565b3d9150611ad9565b985050506020873d602011611b32575b81611b1c6020938361416e565b810103126112a957611650898b98519091611645565b3d9150611b0f565b6040513d8a823e3d90fd5b81611b4f9161416e565b610d4657845f6115cb565b8680fd5b81611b689161416e565b610d4657845f611546565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2578073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60355416813b156107495782916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561072957611da6575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101a257806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f48f5c3ed000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561072957611d91575b5073ffffffffffffffffffffffffffffffffffffffff60445416803b156107625781809160c4604051809481937f7e87ce7d000000000000000000000000000000000000000000000000000000008352611d7b6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b600160a48401525af1801561072957610ba95750f35b81611d9b9161416e565b6101a257805f611cb1565b81611db09161416e565b6101a257805f611c1f565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601a54611df6816141ea565b91611e04604051938461416e565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611e46576040518061022e8782613fc5565b600160208192611e5585614202565b815201920192019190611e31565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601b54611e9e816141ea565b611eab604051918261416e565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611f8357868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611f1857505050500390f35b91936020611f73827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611f638351604084526040840190613f2d565b9201519084818403910152613f70565b9601920192018594939192611f09565b60026020600192604051611f9681614109565b611f9f86614202565b8152611fac858701614305565b83820152815201920192019190611edb565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101a257806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f48f5c3ed000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561072957612101575b50602073ffffffffffffffffffffffffffffffffffffffff60445416606473ffffffffffffffffffffffffffffffffffffffff6029541660405194859384927f8161b8740000000000000000000000000000000000000000000000000000000084526001600485015260248401528160448401525af18015610729576106fd575080f35b8161210b9161416e565b6101a257805f61207d565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257602060405173fffd8963efd1fc6a506488495d951d5263988d258152f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2578073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60295416813b156107495782916044839260405194859384927f9612fe6a0000000000000000000000000000000000000000000000000000000084526004840152606460248401525af18015610729576125e1575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60295416604051907f97e8cd4e0000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa9081156107655783916125a9575b50612296906147ba565b73ffffffffffffffffffffffffffffffffffffffff60355416813b156107495782916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561072957612594575b5073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561076257604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107295761257f575b50602073ffffffffffffffffffffffffffffffffffffffff60445416606473ffffffffffffffffffffffffffffffffffffffff6029541660405194859384927f8161b87400000000000000000000000000000000000000000000000000000000845230600485015260248401528360448401525af1801561072957612550575b5073ffffffffffffffffffffffffffffffffffffffff60445416816024602073ffffffffffffffffffffffffffffffffffffffff6029541693604051928380927f97e8cd4e0000000000000000000000000000000000000000000000000000000082528760048301525afa90811561072957829161251b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d9f57604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561072957612506575b506125036124fe30846148e8565b6147ba565b80f35b816125109161416e565b610d9f57815f6124f0565b9150506020813d602011612548575b816125376020938361416e565b810103126112a9578290515f61247b565b3d915061252a565b6020813d602011612577575b816125696020938361416e565b810103126112a95751612402565b3d915061255c565b816125899161416e565b6101a257805f612382565b8161259e9161416e565b6101a257805f6122f9565b9250506020823d6020116125d9575b816125c56020938361416e565b810103126112a9576122968392519061228c565b3d91506125b8565b816125eb9161416e565b6101a257805f612216565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106126735761022e856102228187038261416e565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161265c565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061271c5761022e856102228187038261416e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612705565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257601e546127e4816141ea565b6127f1604051918261416e565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061293f5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b83831061285d5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106128f657505050505060208060019297019301930190928695949293612850565b9091929394602080612932837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951613f2d565b97019501939291016128d2565b60405161294b81614109565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612974816141ea565b91612982604051938461416e565b8183528a526020808b20908b9084015b8382106129b8575050505060019282602092836002950152815201920192019190612821565b6001602081926129c786614202565b815201930191019091612992565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2578073ffffffffffffffffffffffffffffffffffffffff604454166040517ff02de3b2000000000000000000000000000000000000000000000000000000008152602081600481855afa801561076557612a64918491612ce2575b50614724565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561076257604051907f81bad6f3000000000000000000000000000000000000000000000000000000008252600160048301528260248301528260448301528260648301526084820152818160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561072957612ccd575b5073ffffffffffffffffffffffffffffffffffffffff6035541660405190807fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc8480a273ffffffffffffffffffffffffffffffffffffffff60445416803b156107af5760248385819381957f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561072957612cb8575b506004602073ffffffffffffffffffffffffffffffffffffffff60445416604051928380927ff02de3b20000000000000000000000000000000000000000000000000000000082525afa908115610729578291612c89575b5073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107495773ffffffffffffffffffffffffffffffffffffffff604051927f515361f600000000000000000000000000000000000000000000000000000000845216600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561072957610ba95750f35b612cab915060203d602011612cb1575b612ca3818361416e565b8101906141af565b5f612be4565b503d612c99565b81612cc29161416e565b6101a257805f612b8c565b81612cd79161416e565b6101a257805f612aec565b612cfb915060203d602011612cb157612ca3818361416e565b5f612a5e565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612d7e5761022e856102228187038261416e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612d67565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257604051610b778082019082821067ffffffffffffffff83111761337657908291615cbc8339039082f080156133695773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006044541617604455604051612e5381614109565b600d815281602082017f666565436f6e74726f6c6c6572000000000000000000000000000000000000008152604051600d6020820192835e82602d820152600d8152612ea0602d8261416e565b519020604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561072957829161334a575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d9f578173ffffffffffffffffffffffffffffffffffffffff612f749260405193849283927fc657c7180000000000000000000000000000000000000000000000000000000084521696876004840152604060248401526044830190613f2d565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561072957613335575b50507fffffffffffffffffffffffff00000000000000000000000000000000000000006035541617603555606090604051612fd560608261416e565b6002815260208101906040368337611325614997845b60ff8116600281101561319b5760405184810181811067ffffffffffffffff82111761316e578190601260406130916130588e8b8b88398086528501604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b8481036020860152604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b920152039088f0801561316357816130cd9173ffffffffffffffffffffffffffffffffffffffff6130c381958a6148a7565b91169052866148a7565b5116803b15611b5a578680916044604051809481937f40c10f190000000000000000000000000000000000000000000000000000000083523060048401527f800000000000000000000000000000000000000000000000000000000000000060248401525af180156131635790879161314e575b505060010160ff16612feb565b816131589161416e565b610d9b57855f613141565b6040513d89823e3d90fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b868587815115613308578073ffffffffffffffffffffffffffffffffffffffff91505116908051600110156133085773ffffffffffffffffffffffffffffffffffffffff83928160406020940151168082105f146133005782905b167fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a5516807fffffffffffffffffffffffff00000000000000000000000000000000000000006029541617602955604473ffffffffffffffffffffffffffffffffffffffff81541660405194859384927fa9059cbb00000000000000000000000000000000000000000000000000000000845260048401527f800000000000000000000000000000000000000000000000000000000000000060248401525af18015610729576132cb575080f35b6020813d6020116132f8575b816132e46020938361416e565b81010312610d9f5751801515036101a25780f35b3d91506132d7565b9082906131f6565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b8161333f9161416e565b610d9f57815f612f99565b613363915060203d602011612cb157612ca3818361416e565b5f612efa565b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576004356024358273ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff6029541690803b15613633576040517f9612fe6a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820184905282908290604490829084905af1801561072957613672575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60295416906040517f97e8cd4e000000000000000000000000000000000000000000000000000000008152826004820152602081602481855afa8015610bcf5785918591613637575b50906134fa91614831565b803b15613633576040517f9612fe6a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820185905282908290604490829084905af180156107295761361e575b505073ffffffffffffffffffffffffffffffffffffffff6044541691602073ffffffffffffffffffffffffffffffffffffffff602954166024604051809681937f97e8cd4e00000000000000000000000000000000000000000000000000000000835260048301525afa918215610bcf5784926135e8575b61250393500190614831565b91506020833d602011613616575b816136036020938361416e565b810103126112a9576125039251916135dc565b3d91506135f6565b816136289161416e565b61363357825f613564565b8280fd5b945050506020833d60201161366a575b816136546020938361416e565b810103126112a9576134fa8487945190916134ef565b3d9150613647565b8161367c9161416e565b61363357825f613477565b50346101a257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25780623e83e973ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60355416813b156107af5783916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1908115610765578391613c0a575b505073ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561074957604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610765578391613bf5575b50506040517fa7abe2f70000000000000000000000000000000000000000000000000000000060208201528160248201526024815261380760448261416e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610749578261386291604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190613f2d565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610765578391613be0575b505073ffffffffffffffffffffffffffffffffffffffff6044541690813b1561074957829160c4839260405194859384927f7e87ce7d0000000000000000000000000000000000000000000000000000000084526139586004850173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b60a48401525af1801561072957613bcb575b505080623e93e873ffffffffffffffffffffffffffffffffffffffff60355416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561074957604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610765578391613bb6575b50506040517fa7abe2f700000000000000000000000000000000000000000000000000000000602082015281602482015260248152613a3c60448261416e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107495782613a9791604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190613f2d565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610765578391613ba1575b505073ffffffffffffffffffffffffffffffffffffffff6044541690813b1561074957829160c4839260405194859384927f7e87ce7d000000000000000000000000000000000000000000000000000000008452613b8d6004850173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b60a48401525af1801561072957610ba95750f35b81613bab9161416e565b61076257815f613abf565b81613bc09161416e565b61076257815f6139fc565b81613bd59161416e565b6101a257805f61396a565b81613bea9161416e565b61076257815f61388a565b81613bff9161416e565b61076257815f6137c7565b81613c149161416e565b61076257815f61373a565b9050346112a9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112a95760208160048173ffffffffffffffffffffffffffffffffffffffff604454167ff02de3b20000000000000000000000000000000000000000000000000000000082525afa8015613ed357613ca9915f91612ce25750614724565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156112a9576040517fca669fa7000000000000000000000000000000000000000000000000000000008152600160048201525f8160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015613ed357613ec0575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101a257806040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152818160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561072957613eab575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff60355416813b156107495782916024839260405194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561072957613e96575b50506004602073ffffffffffffffffffffffffffffffffffffffff60445416604051928380927ff02de3b20000000000000000000000000000000000000000000000000000000082525afa801561072957612503918391612ce25750614724565b81613ea09161416e565b6101a257805f613e35565b81613eb59161416e565b6101a257805f613db8565b613ecc91505f9061416e565b5f80613d19565b6040513d5f823e3d90fd5b60206040818301928281528451809452019201905f5b818110613f015750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613ef4565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b818110613f8d5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613f80565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310613ff757505050505090565b9091929394602080614033837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951613f2d565b97019301930191939290613fe8565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036112a957565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061409757505050505090565b90919293946020806140fa837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613f70565b97019301930191939290614088565b6040810190811067ffffffffffffffff82111761412557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761412557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761412557604052565b908160209103126112a9575173ffffffffffffffffffffffffffffffffffffffff811681036112a95790565b908160209103126112a9575190565b67ffffffffffffffff81116141255760051b60200190565b90604051915f8154908160011c92600183169283156142fb575b6020851084146142ce57848752869390811561428e575060011461424a575b506142489250038361416e565b565b90505f9291925260205f20905f915b818310614272575050906020614248928201015f61423b565b6020919350806001915483858901015201910190918492614259565b602093506142489592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61423b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f169361421c565b90604051918281549182825260208201905f5260205f20925f905b80600783011061451c576142489454918181106144e6575b8181106144b0575b81811061447a575b818110614444575b81811061440e575b8181106143d8575b8181106143a3575b10614376575b50038361416e565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f61436e565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301614368565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301614360565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301614358565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301614350565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301614348565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301614340565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301614338565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391614320565b919082039182116145b657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60085460ff1680156145f25790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613ed3575f9161468a575b50151590565b90506020813d6020116146b4575b816146a56020938361416e565b810103126112a957515f614684565b3d9150614698565b90929162ffffff60a09161471e8460c081019773ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b16910152565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156112a95773ffffffffffffffffffffffffffffffffffffffff604051917f515361f60000000000000000000000000000000000000000000000000000000083521660048201525f60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613ed3576147b05750565b5f6142489161416e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156112a957604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152606460248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613ed3576147b05750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156112a957604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613ed3576147b05750565b80518210156148bb5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff168061490857503190565b9073ffffffffffffffffffffffffffffffffffffffff602460209260405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115613ed3575f91614967575090565b90506020813d60201161498e575b816149826020938361416e565b810103126112a9575190565b3d915061497556fe60e0806040523461040657611325803803809161001c828561040a565b83398101906060818303126104065780516001600160401b038111610406578261004791830161042d565b60208201519092906001600160401b0381116104065760409161006b91840161042d565b91015160ff811681036104065782516001600160401b038111610337576100925f54610482565b601f81116103b7575b506020601f821160011461035657819293945f9261034b575b50508160011b915f199060031b1c1916175f555b81516001600160401b038111610337576100e3600154610482565b601f81116102d4575b50602092601f821160011461027357928192935f92610268575b50508160011b915f199060031b1c1916176001555b6080524660a0526040515f905f54918161013484610482565b9182825260208201946001811690815f1461024c5750600114610202575b61015e9250038261040a565b51902060405160208101917