UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 187 kB
{"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":"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_MAX_TICK_equalsNegativeMIN_TICK","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_MIN_TICK_equalsNegativeMAX_TICK","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_getSqrtPriceAtTick_throwsForTooLarge","inputs":[{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_getTickAtSqrtPrice_getSqrtPriceAtTick_relation","inputs":[{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_fuzz_getTickAtSqrtPrice_throwsForInvalid","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"gte","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getSqrtPriceAtTick_gasCost","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getSqrtPriceAtTick_isGreaterThanJSImplMaxTick","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_isLessThanJSImplMinTick","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_isValidMaxTick","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_isValidMaxTickSubOne","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_isValidMinTick","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_isValidMinTickAddOne","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getSqrtPriceAtTick_matchesJavaScriptImplByOneHundrethOfABip","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getSqrtPriceAtTick_throwsForInt24Min","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getSqrtPriceAtTick_throwsForTooHigh","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getSqrtPriceAtTick_throwsForTooLow","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getTickAtSqrtPrice_gasCost","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getTickAtSqrtPrice_isValidMaxSqrtPriceMinusOne","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getTickAtSqrtPrice_isValidMinSqrtPrice","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getTickAtSqrtPrice_isValidMinSqrtPricePlusOne","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getTickAtSqrtPrice_isValidPriceClosestToMaxTick","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_getTickAtSqrtPrice_matchesJavascriptImplWithin1","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getTickAtSqrtPrice_throwsForTooHigh","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getTickAtSqrtPrice_throwsForTooLow","inputs":[],"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":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561657f90816100348239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301862e101461410b575080630a9254e414613f8557806313fb5f1214613ead5780631d1c59dc14613d315780631e6a79c8146137505780631ed7831c146136a75780632636449314612ff65780632ade388014612dca5780632d8762d514612b1d578063327241831461266d5780633e5e3c23146125c45780633f7286f41461251b5780634c322fc11461246b57806366d9a9a0146123105780637342df3e1461227f5780637db51e0b14611f9357806380749faa14611e195780638216a86d14611cab57806383b83c1614611bbf57806385226c8114611b1757806387491df81461199e5780638eb9de67146118335780639011865814611691578063916a17c6146115bc578063a6d72f4a14611432578063af4a6402146112ca578063b0464fdc146111f5578063b5508aa91461114d578063ba414fa61461110a578063bfc0c1a714610f36578063c741584c14610e3c578063c74502c514610cba578063e20c9f7114610c01578063e2663e3614610577578063ebb05b1f14610501578063f8945cd6146101f85763fa7626d4146101b5575f80fd5b346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557602060ff601f54166040519015158152f35b80fd5b50346101f55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760043573ffffffffffffffffffffffffffffffffffffffff81168082036104fd576024359081151582036104f95773ffffffffffffffffffffffffffffffffffffffff9291156104ba57508173fffd8963efd1fc6a506488495d951d5263988d26816102949316615902565b5f806102e16103136102a46150db565b6040519283917fb60e72cc000000000000000000000000000000000000000000000000000000006020840152604060248401526064830190614343565b866044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614545565b6020815191016a636f6e736f6c652e6c6f675afa50165b8173ffffffffffffffffffffffffffffffffffffffff604051927f61487524000000000000000000000000000000000000000000000000000000006020850152169182602482015260248152610381604482614545565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048e57816103dc91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614343565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a576104a5575b5050602073ffffffffffffffffffffffffffffffffffffffff60225416916024604051809481937f1b8986d300000000000000000000000000000000000000000000000000000000835260048301525afa801561049a57610460575080f35b6020813d602011610492575b8161047960209383614545565b8101031261048e5761048a90614586565b5080f35b5080fd5b3d915061046c565b6040513d84823e3d90fd5b816104af91614545565b61048e57815f610401565b6104ce915083836401000276a21691615902565b5f806102e16104de6102a46150db565b6020815191016a636f6e736f6c652e6c6f675afa501661032a565b8380fd5b8280fd5b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576040517f614875240000000000000000000000000000000000000000000000000000000060208201526401000276a260248083018290528252908290610381604482614545565b50346101f55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557600435908160020b8092036101f557620d89e79181811215610ba957197f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610a94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a94575b7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276189282811215610b7357197f800000000000000000000000000000000000000000000000000000000000000003927f80000000000000000000000000000000000000000000000000000000000000008411610b46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401938411610b46576106e2929391615902565b7f8000000000000000000000000000000000000000000000000000000000000000811015610aee577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610a94571960018101809111610a94575b6040517fa322c40e0000000000000000000000000000000000000000000000000000000081528160048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ae35761080a6108665f9384938791610ac1575b5061083a6107cc6150db565b916040519485937f4b5c4277000000000000000000000000000000000000000000000000000000006020860152604060248601526064850190614343565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016044850152614343565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614545565b6020815191016a636f6e736f6c652e6c6f675afa5060020b9060018201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008312627fffff841317610a94576108bb81615116565b92817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff6109ab61096b8261096261090688615116565b9a61095661091382615488565b60020b60409b8c9161092783519384614545565b600b83527f6c6f7765722070726963650000000000000000000000000000000000000000006020840152615831565b828c1695869116614c4f565b60011c16615488565b60020b8487519161097c8984614545565b600983527f6d696420707269636500000000000000000000000000000000000000000000006020840152615831565b0173ffffffffffffffffffffffffffffffffffffffff8111610a675794610a1c610a21926109dc610a649798615488565b60020b908651916109ed8884614545565b600b83527f75707065722070726963650000000000000000000000000000000000000000006020840152615831565b615488565b60020b90610a3183519384614545565b601583527f6c6f776572207072696365206e657874207469636b0000000000000000000000602084015260020b90615831565b80f35b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b610add91503d8089833e610ad58183614545565b810190614659565b5f6107c0565b6040513d85823e3d90fd5b7f8000000000000000000000000000000000000000000000000000000000000000810190811115610760576024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b927f80000000000000000000000000000000000000000000000000000000000000008401809411610b46576106e2929391615902565b7f8000000000000000000000000000000000000000000000000000000000000000810180911115610638576024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610c8e57610c8a85610c7e81870382614545565b604051918291826142f4565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610c67565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5578073ffffffffffffffffffffffffffffffffffffffff602254166020620d89e76024604051809481937f8147b13b00000000000000000000000000000000000000000000000000000000835260020b60048301525afa90811561049a578291610e02575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917f98296c5400000000000000000000000000000000000000000000000000000000835216600482015273fffa429fbf7baeed2496f0a9f5ccf2bb4abf52f960248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b81610df891614545565b6101f55780f35b50fd5b90506020813d602011610e34575b81610e1d60209383614545565b81010312610dff57610e2e906145d4565b5f610d4d565b3d9150610e10565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f1b8986d300000000000000000000000000000000000000000000000000000000825264010005bd8260048301525afa801561049a578290610efb575b610a6491507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276199060020b614cfc565b506020813d602011610f2e575b81610f1560209383614545565b8101031261048e57610f29610a6491614586565b610ecc565b3d9150610f08565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557806040517f8b86327a0000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000602482015260248152610fc4604482614545565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff578161101f91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614343565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a576110f5575b50506024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f8147b13b0000000000000000000000000000000000000000000000000000000082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000060048301525afa801561049a576110c3575080f35b6020813d6020116110ed575b816110dc60209383614545565b8101031261048e5761048a906145d4565b3d91506110cf565b816110ff91614545565b6101f557805f611044565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576020611143614b76565b6040519015158152f35b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601954611188816146d8565b916111966040519384614545565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106111d85760405180610c8a87826143db565b6001602081926111e785614782565b8152019201920191906111c3565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601c54611230816146d8565b9161123e6040519384614545565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106112805760405180610c8a8782614458565b60026020600192604051611293816144fc565b73ffffffffffffffffffffffffffffffffffffffff86541681526112b88587016148c3565b8382015281520192019201919061126b565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576040517f8b86327a000000000000000000000000000000000000000000000000000000006020820152620d89e96024808301829052825290829061133e604482614545565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048e578161139991604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614343565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a5761141d575b5050602073ffffffffffffffffffffffffffffffffffffffff60225416916024604051809481937f8147b13b00000000000000000000000000000000000000000000000000000000835260048301525afa801561049a576110c3575080f35b8161142791614545565b61048e57815f6113be565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557806040517f6148752400000000000000000000000000000000000000000000000000000000602082015273fffd8963efd1fc6a506488495d951d5263988d266024820152602481526114b4604482614545565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff578161150f91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614343565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a576115a7575b50506024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f1b8986d300000000000000000000000000000000000000000000000000000000825273fffd8963efd1fc6a506488495d951d5263988d2660048301525afa801561049a57610460575080f35b816115b191614545565b6101f557805f611534565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601d546115f7816146d8565b916116056040519384614545565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116475760405180610c8a8782614458565b6002602060019260405161165a816144fc565b73ffffffffffffffffffffffffffffffffffffffff865416815261167f8587016148c3565b83820152815201920192019190611632565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101f557806040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5469636b4d6174684765745469636b41745371727450726963650000000000006044820152818160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a5761181e575b505064020000000081905b6064600183019210156117a35773fffffffffffffffffffffffffffffffffffffffe81611797606493615488565b5060011b169050611769565b826040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a576117f6575080f35b61048a9060203d602011611817575b61180f8183614545565b810190614b67565b503d611805565b8161182891614545565b6101f557805f61175e565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557806024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f8147b13b000000000000000000000000000000000000000000000000000000008252620d89e860048301525afa90811561049a578291611964575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917fdb07fcd200000000000000000000000000000000000000000000000000000000835216600482015273b504f333f9de6484597d89b3754abe9f1d6f60ba60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b90506020813d602011611996575b8161197f60209383614545565b81010312610dff57611990906145d4565b5f6118c3565b3d9150611972565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557806024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f8147b13b0000000000000000000000000000000000000000000000000000000082527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860048301525afa90811561049a578291611add575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917fb12fc00500000000000000000000000000000000000000000000000000000000835216600482015264016abb5aac60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b90506020813d602011611b0f575b81611af860209383614545565b81010312610dff57611b09906145d4565b5f611a4b565b3d9150611aeb565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601a54611b52816146d8565b91611b606040519384614545565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611ba25760405180610c8a87826143db565b600160208192611bb185614782565b815201920192019190611b8d565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55773ffffffffffffffffffffffffffffffffffffffff60225416602073fffd8963efd1fc6a506488495d951d5263988d256024604051809481937f1b8986d300000000000000000000000000000000000000000000000000000000835260048301525afa801561049a578290611c70575b610a649150620d89e79060020b614cfc565b506020813d602011611ca3575b81611c8a60209383614545565b8101031261048e57611c9e610a6491614586565b611c5e565b3d9150611c7d565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55773ffffffffffffffffffffffffffffffffffffffff60225416604051907fa1634b14000000000000000000000000000000000000000000000000000000008252602082600481845afa918215610ae3578392611dda575b50906020600492604051938480927f6882a8880000000000000000000000000000000000000000000000000000000082525afa918215610ae3578392611d95575b50611d90611d82610a6493614594565b9160020b9160020b82614cfc565b614c5c565b91506020823d602011611dd2575b81611db060209383614545565b810103126104fd57611d90611d82611dca610a6494614586565b935050611d72565b3d9150611da3565b91506020823d602011611e11575b81611df560209383614545565b810103126104fd576020611e0a600493614586565b9250611d31565b3d9150611de8565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101f557806040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5469636b4d61746847657453717274507269636541745469636b0000000000006044820152818160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a57611f7e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffce5b60328160020b12611f6857506040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561049a576117f6575080f35b611f786001820160020b91615116565b50611f0a565b81611f8891614545565b6101f557805f611ee6565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5578073ffffffffffffffffffffffffffffffffffffffff602254166040517f8147b13b0000000000000000000000000000000000000000000000000000000081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186004820152602081602481855afa908115610ae3578391612241575b506040517f083666e4000000000000000000000000000000000000000000000000000000008152602081600481865afa9081156122365784916121d2575b50916120a660209273ffffffffffffffffffffffffffffffffffffffff80602496169116614d72565b604051928380927f8147b13b0000000000000000000000000000000000000000000000000000000082527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860048301525afa90811561049a578291612198575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917f98296c540000000000000000000000000000000000000000000000000000000083521660048201526401000276a360248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b90506020813d6020116121ca575b816121b360209383614545565b81010312610dff576121c4906145d4565b5f612106565b3d91506121a6565b9290506020833d60201161222e575b816121ee60209383614545565b81010312612229576120a660209273ffffffffffffffffffffffffffffffffffffffff8061221d6024976145d4565b9496505050925061207d565b505050fd5b3d91506121e1565b6040513d86823e3d90fd5b90506020813d602011612277575b8161225c60209383614545565b810103126122735761226d906145d4565b5f61203f565b5050fd5b3d915061224f565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576040517f8b86327a0000000000000000000000000000000000000000000000000000000060208201527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276176024808301829052825290829061133e604482614545565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601b5461234b816146d8565b6123586040519182614545565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061243057868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106123c557505050500390f35b91936020612420827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836124108351604084526040840190614343565b9201519084818403910152614386565b96019201920185949391926123b6565b60026020600192604051612443816144fc565b61244c86614782565b81526124598587016148c3565b83820152815201920192019190612388565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f1b8986d300000000000000000000000000000000000000000000000000000000825273fffa429fbf7baeed2496f0a9f5ccf2bb4abf52f960048301525afa801561049a578290611c7057610a649150620d89e79060020b614cfc565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061259857610c8a85610c7e81870382614545565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612581565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061264157610c8a85610c7e81870382614545565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161262a565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760206040516126ab8282614545565b828152916401000276a35b73ffffffffffffffffffffffffffffffffffffffff808260041b169116938185101561292b57836401000276a386036128b8575b506040517f6900a3ae0000000000000000000000000000000000000000000000000000000081528560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156122365791858061279d938195889161289e575b506040519584879551918291018487015e840190828201898152815193849201905e0101858152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614545565b938373ffffffffffffffffffffffffffffffffffffffff60225416916024604051809481937f1b8986d300000000000000000000000000000000000000000000000000000000835260048301525afa908115610ae3578391612869575b506021546801000000000000000081101561283c5780600161281f9201602155614885565b62ffffff829392549160031b928116831b921b19161790556126b6565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b90508381813d8311612897575b6128808183614545565b810103126104fd5761289190614586565b5f6127fa565b503d612876565b6128b291503d808a833e610ad58183614545565b5f61274a565b90600182612925926040519481869251918291018484015e81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182614545565b836126ea565b83915061296e60409182516129408482614545565b601d81527f666f7267652d746573742d6765745469636b417453717274507269636500000085820152614de8565b9182518301928181818601950312612b1557818101519067ffffffffffffffff8211612b1957019280603f85011215612b1557818401516129ae816146d8565b946129bb85519687614545565b81865283808088019360051b83010101928311612b11578401905b828210612afa5750505050825b8251811015612af6576129f6818461476e565b5160020b612a0382614885565b90549060031b1c60020b908181135f14612af157905b60020b9060020b03627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610a67578490737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048e578351907f3e91408000000000000000000000000000000000000000000000000000000000825260020b6004820152600260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ae757612ad2575b50506001016129e3565b81612adc91614545565b6104f9578385612ac8565b84513d84823e3d90fd5b612a19565b8380f35b838091612b0684614586565b8152019101906129d6565b8680fd5b8480fd5b8580fd5b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5578073ffffffffffffffffffffffffffffffffffffffff602254166040517f8147b13b000000000000000000000000000000000000000000000000000000008152620d89e86004820152602081602481855afa908115610ae3578391612d90575b506040517f3029618a000000000000000000000000000000000000000000000000000000008152602081600481865afa908115612236578491612d31575b5091612c1360209273ffffffffffffffffffffffffffffffffffffffff80602496169116614d72565b604051928380927f8147b13b000000000000000000000000000000000000000000000000000000008252620d89e860048301525afa90811561049a578291612cf7575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917f98296c5400000000000000000000000000000000000000000000000000000000835216600482015273fffd8963efd1fc6a506488495d951d5263988d2660248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b90506020813d602011612d29575b81612d1260209383614545565b81010312610dff57612d23906145d4565b5f612c56565b3d9150612d05565b9290506020833d602011612d88575b81612d4d60209383614545565b8101031261222957612c1360209273ffffffffffffffffffffffffffffffffffffffff80612d7c6024976145d4565b94965050509250612bea565b3d9150612d40565b90506020813d602011612dc2575b81612dab60209383614545565b8101031261227357612dbc906145d4565b5f612bac565b3d9150612d9e565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557601e54612e05816146d8565b612e126040519182614545565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310612f605786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310612e7e5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612f1757505050505060208060019297019301930190928695949293612e71565b9091929394602080612f53837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951614343565b9701950193929101612ef3565b604051612f6c816144fc565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612f95816146d8565b91612fa36040519384614545565b8183528a526020808b20908b9084015b838210612fd9575050505060019282602092836002950152815201920192019190612e42565b600160208192612fe886614782565b815201930191019091612fb3565b50346101f55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576004358060020b908181036104fd5790828113156133705750620d89e99060020b8281121561334057197f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610b46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b4657905b8281121561330c57197f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610b46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b46579061316e915b7f80000000000000000000000000000000000000000000000000000000007fffff91615902565b7f80000000000000000000000000000000000000000000000000000000000000008110156132b4577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610a94571960018101809111610a94575b6040517fa322c40e0000000000000000000000000000000000000000000000000000000081528160048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ae35761080a6132575f9384938791610ac1575061083a6107cc6150db565b6020815191016a636f6e736f6c652e6c6f675afa5060020b5b81604051917f8b86327a00000000000000000000000000000000000000000000000000000000602084015260020b918260248201526024815261133e604482614545565b7f80000000000000000000000000000000000000000000000000000000000000008101908111156131ec576024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f80000000000000000000000000000000000000000000000000000000000000008101809111610b46579061316e91613147565b7f80000000000000000000000000000000000000000000000000000000000000008101809111610b4657906130c5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276179291508181121561364f57197f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610a94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a94575b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000928281121561361957197f800000000000000000000000000000000000000000000000000000000000000003927f80000000000000000000000000000000000000000000000000000000000000008411610b46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401938411610b46576134bb929391615902565b7f80000000000000000000000000000000000000000000000000000000000000008110156135c1577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111610a94571960018101809111610a94575b6040517fa322c40e0000000000000000000000000000000000000000000000000000000081528160048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ae35761080a6135a45f9384938791610ac1575061083a6107cc6150db565b6020815191016a636f6e736f6c652e6c6f675afa5060020b613270565b7f8000000000000000000000000000000000000000000000000000000000000000810190811115613539576024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b927f80000000000000000000000000000000000000000000000000000000000000008401809411610b46576134bb929391615902565b7f8000000000000000000000000000000000000000000000000000000000000000810180911115613411576024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f55760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061372457610c8a85610c7e81870382614545565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161370d565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557602060405161378e8282614545565b82815260325b620d89e88160020b1315613a3f57506137e360409182516137b58482614545565b601d81527f666f7267652d746573742d67657453717274507269636541745469636b00000085820152614de8565b9182518301928181818601950312612b1557818101519067ffffffffffffffff8211612b1957019280603f85011215612b155781840151613823816146d8565b9461383085519687614545565b81865283808088019360051b83010101928311612b11578401905b828210613a285750505050825b8251811015612af65773ffffffffffffffffffffffffffffffffffffffff613880828561476e565b511673ffffffffffffffffffffffffffffffffffffffff6138a083614693565b90549060031b1c168082115f14613a0c5773ffffffffffffffffffffffffffffffffffffffff8083925b1691160373ffffffffffffffffffffffffffffffffffffffff81116139df5773ffffffffffffffffffffffffffffffffffffffff16620f4240810290808204620f424014901517156139df5781156139b25790859104737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048e578351907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ae75761399d575b5050600101613858565b816139a791614545565b6104f957835f613993565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b73ffffffffffffffffffffffffffffffffffffffff80836138ca565b838091613a34846145d4565b81520191019061384b565b835b60028110613a89575060020b60011b8060020b90810315613794576024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b929190613a9590614594565b928360020b91837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffce8403613cbe575b506040517fa322c40e0000000000000000000000000000000000000000000000000000000081528360048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613cb35785808094613b76948b91613c99575b506040519584879551918291018487015e8401908282018c8152815193849201905e0101888152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614545565b918373ffffffffffffffffffffffffffffffffffffffff60225416916024604051809481937f8147b13b00000000000000000000000000000000000000000000000000000000835260048301525afa908115613c8e578691613c59575b50835468010000000000000000811015613c2c5790613bf9826001809594018755614693565b73ffffffffffffffffffffffffffffffffffffffff80839493549260031b9316831b921b19161790550192909192613a41565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b90508381813d8311613c87575b613c708183614545565b81010312612b1957613c81906145d4565b5f613bd3565b503d613c66565b6040513d88823e3d90fd5b613cad91503d808d833e610ad58183614545565b5f613b23565b6040513d89823e3d90fd5b90600182613d2b926040519481869251918291018484015e81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182614545565b83613ac4565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5578073ffffffffffffffffffffffffffffffffffffffff6022541660207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276196024604051809481937f8147b13b00000000000000000000000000000000000000000000000000000000835260020b60048301525afa90811561049a578291613e73575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dff5773ffffffffffffffffffffffffffffffffffffffff604051917f98296c5400000000000000000000000000000000000000000000000000000000835216600482015264010005bd8260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561049a57610dee5750f35b90506020813d602011613ea5575b81613e8e60209383614545565b81010312610dff57613e9f906145d4565b5f613de1565b3d9150613e81565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f5576024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927f1b8986d30000000000000000000000000000000000000000000000000000000082526401000276a360048301525afa801561049a578290613f4a575b610a64915060020b614c5c565b506020813d602011613f7d575b81613f6460209383614545565b8101031261048e57613f78610a6491614586565b613f3d565b3d9150613f57565b50346101f557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f557604051610a928082019082821067ffffffffffffffff83111761283c57908291615ae18339039082f080156140fe5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602254161760225560205481602055806140a2575b506021548160215580614040575080f35b6009600a9101047f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b570017f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5705b81811061409757505080f35b82815560010161408b565b7fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb017fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb5b8181106140f3575061402f565b8281556001016140e6565b50604051903d90823e3d90fd5b90503461426e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261426e5773ffffffffffffffffffffffffffffffffffffffff602254167f6882a888000000000000000000000000000000000000000000000000000000008252602082600481845afa918215614263575f926142b3575b506020600491604051928380927fa1634b140000000000000000000000000000000000000000000000000000000082525afa908115614263575f91614272575b50611d826141db91614594565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561426e57604051907ffe74f05b0000000000000000000000000000000000000000000000000000000082526004820152620d89e860248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561426357614255575080f35b61426191505f90614545565b005b6040513d5f823e3d90fd5b5f80fd5b90506020813d6020116142ab575b8161428d60209383614545565b8101031261426e57611d826142a46141db92614586565b91506141ce565b3d9150614280565b9091506020813d6020116142ec575b816142cf60209383614545565b8101031261426e5760206142e4600492614586565b92915061418e565b3d91506142c2565b60206040818301928281528451809452019201905f5b8181106143175750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161430a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b8181106143a35750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614396565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061440d57505050505090565b9091929394602080614449837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951614343565b970193019301919392906143fe565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061448a57505050505090565b90919293946020806144ed837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190614386565b9701930193019193929061447b565b6040810190811067ffffffffffffffff82111761451857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761451857604052565b51908160020b820361426e57565b60020b5f03908160020b9182036145a757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b519073ffffffffffffffffffffffffffffffffffffffff8216820361426e57565b92919267ffffffffffffffff8211614518576040519161463d601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184614545565b82948184528183011161426e578281602093845f96015e010152565b60208183031261426e5780519067ffffffffffffffff821161426e57019080601f8301121561426e578151614690926020016145f5565b90565b6020548110156146ab5760205f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff81116145185760051b60200190565b8051156146ab5760200190565b8051600110156146ab5760400190565b8051600210156146ab5760600190565b8051600310156146ab5760800190565b8051600410156146ab5760a00190565b8051600510156146ab5760c00190565b8051600610156146ab5760e00190565b8051600710156146ab576101000190565b80518210156146ab5760209160051b010190565b90604051915f8154908160011c926001831692831561487b575b60208510841461484e57848752869390811561480e57506001146147ca575b506147c892500383614545565b565b90505f9291925260205f20905f915b8183106147f25750509060206147c8928201015f6147bb565b60209193508060019154838589010152019101909184926147d9565b602093506147c89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f6147bb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f169361479c565b906021548210156146ab5760215f52600a8083047f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57001920660030290565b90604051918281549182825260208201905f5260205f20925f905b806007830110614ada576147c8945491818110614aa4575b818110614a6e575b818110614a38575b818110614a02575b8181106149cc575b818110614996575b818110614961575b10614934575b500383614545565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f61492c565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301614926565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b16815201930161491e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301614916565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b16815201930161490e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301614906565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016148fe565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016148f6565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916148de565b9081602091031261426e575190565b60085460ff168015614b855790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614263575f91614c1d575b50151590565b90506020813d602011614c47575b81614c3860209383614545565b8101031261426e57515f614c17565b3d9150614c2b565b919082018092116145a757565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561426e57604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825260048201527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561426357614cf25750565b5f6147c891614545565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561426e57604051917ffe74f05b000000000000000000000000000000000000000000000000000000008352600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561426357614cf25750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561426e57604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5a