From 2705399359364f78c70ec5374cadbbe66a09f6ff Mon Sep 17 00:00:00 2001 From: Andrei Vlad Birgaoanu <99738872+andreivladbrg@users.noreply.github.com> Date: Sun, 17 Sep 2023 13:27:01 +0300 Subject: [PATCH] build: upgrade solidity version to 0.8.21 (#688) * build: upgrade solidity version to 0.8.21 * build: bump the pragma back to >=0.8.19 * build: show unproved and unsupported SMTChecker * refactor: update gas snapshot --------- Co-authored-by: Paul Razvan Berg --- .gas-snapshot | 669 +++++++++++------- foundry.toml | 4 +- script/Base.s.sol | 2 +- script/DeployComptroller.s.sol | 2 +- script/DeployCore.s.sol | 2 +- script/DeployCore2.s.sol | 2 +- script/DeployDeterministicComptroller.s.sol | 2 +- script/DeployDeterministicCore.s.sol | 2 +- script/DeployDeterministicCore2.s.sol | 2 +- script/DeployDeterministicLockupDynamic.s.sol | 2 +- script/DeployDeterministicLockupLinear.s.sol | 2 +- script/DeployLockupDynamic.s.sol | 2 +- script/DeployLockupLinear.s.sol | 2 +- script/GenerateSVG.s.sol | 2 +- script/Init.s.sol | 2 +- test/utils/Precompiles.sol | 6 +- test/utils/Precompiles.t.sol | 2 +- 17 files changed, 416 insertions(+), 291 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 40cb347b3..31ba7f609 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,173 +1,266 @@ -Burn_LockupDynamic_Integration_Concrete_Test:test_Burn_CallerApprovedOperator() (gas: 82944) -Burn_LockupDynamic_Integration_Concrete_Test:test_Burn_CallerNFTOwner() (gas: 70040) -Burn_LockupLinear_Integration_Concrete_Test:test_Burn_CallerApprovedOperator() (gas: 83160) -Burn_LockupLinear_Integration_Concrete_Test:test_Burn_CallerNFTOwner() (gas: 70299) -CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_CancelMultiple() (gas: 825327) -CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_CancelMultiple_ArrayCountZero() (gas: 6249) -CancelMultiple_LockupDynamic_Integration_Fuzz_Test:testFuzz_CancelMultiple(uint256,uint40) (runs: 50, μ: 1189888, ~: 1194666) -CancelMultiple_LockupLinear_Integration_Concrete_Test:test_CancelMultiple() (gas: 558971) +Burn_LockupDynamic_Integration_Concrete_Test:test_Burn_CallerApprovedOperator() (gas: 87474) +Burn_LockupDynamic_Integration_Concrete_Test:test_Burn_CallerNFTOwner() (gas: 78058) +Burn_LockupDynamic_Integration_Concrete_Test:test_Burn_NonTransferableNFT() (gas: 78067) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_NFTDoesNotExist() (gas: 79272) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11325) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 86942) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusPending() (gas: 14284) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 19520) +Burn_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusStreaming() (gas: 19556) +Burn_LockupLinear_Integration_Concrete_Test:test_Burn_CallerApprovedOperator() (gas: 87711) +Burn_LockupLinear_Integration_Concrete_Test:test_Burn_CallerNFTOwner() (gas: 78284) +Burn_LockupLinear_Integration_Concrete_Test:test_Burn_NonTransferableNFT() (gas: 78293) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_NFTDoesNotExist() (gas: 79480) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11311) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 77650) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusPending() (gas: 14270) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 19506) +Burn_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusStreaming() (gas: 19542) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_CancelMultiple() (gas: 831368) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_CancelMultiple_ArrayCountZero() (gas: 6293) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_AllStreamsCold() (gas: 32410) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_AllStreamsNotCancelable() (gas: 866449) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_OnlyNull() (gas: 12340) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_SomeNull() (gas: 78328) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_SomeStreamsCold() (gas: 340997) +CancelMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_SomeStreamsNotCancelable() (gas: 950201) +CancelMultiple_LockupDynamic_Integration_Fuzz_Test:testFuzz_CancelMultiple(uint256,uint40) (runs: 50, μ: 1201756, ~: 1206371) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_CancelMultiple() (gas: 563445) CancelMultiple_LockupLinear_Integration_Concrete_Test:test_CancelMultiple_ArrayCountZero() (gas: 6313) -CancelMultiple_LockupLinear_Integration_Fuzz_Test:testFuzz_CancelMultiple(uint256,uint40) (runs: 50, μ: 792602, ~: 793724) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient() (gas: 388606) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderDoesNotImplementHook() (gas: 374225) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderNotContract() (gas: 100002) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReentrancy() (gas: 376293) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReverts() (gas: 374725) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender() (gas: 383652) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientDoesNotImplementHook() (gas: 369169) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientNotContract() (gas: 97284) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReentrancy() (gas: 371361) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReverts() (gas: 369748) -Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_StatusPending() (gas: 76354) -Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_CallerRecipient(uint256,uint128) (runs: 50, μ: 431864, ~: 433061) -Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_CallerSender(uint256,uint128) (runs: 50, μ: 451169, ~: 452317) -Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_StatusPending(uint256) (runs: 50, μ: 76922, ~: 77115) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient() (gas: 272486) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderDoesNotImplementHook() (gas: 258004) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderNotContract() (gas: 80382) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReentrancy() (gas: 260080) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReverts() (gas: 258504) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender() (gas: 267507) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientDoesNotImplementHook() (gas: 252935) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientNotContract() (gas: 77660) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReentrancy() (gas: 255135) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReverts() (gas: 253514) -Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_StatusPending() (gas: 76412) -Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_CallerRecipient(uint256,uint128) (runs: 50, μ: 288908, ~: 288864) -Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_CallerSender(uint256,uint128) (runs: 50, μ: 308395, ~: 308310) -Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_StatusPending(uint256) (runs: 50, μ: 76952, ~: 77027) -ClaimProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_ClaimProtocolRevenues() (gas: 317052) -ClaimProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ClaimProtocolRevenues() (gas: 244406) -Constructor_LockupDynamic_Integration_Concrete_Test:test_Constructor() (gas: 5301627) -Constructor_LockupLinear_Integration_Concrete_Test:test_Constructor() (gas: 4113621) -CreateWithDeltas_LockupDynamic_Integration_Concrete_Test:test_CreateWithDeltas() (gas: 376989) -CreateWithDeltas_LockupDynamic_Integration_Fuzz_Test:testFuzz_CreateWithDeltas((uint128,uint64,uint40)[]) (runs: 50, μ: 4097904, ~: 3555562) -CreateWithDurations_LockupLinear_Integration_Concrete_Test:test_CreateWithDurations() (gas: 282804) -CreateWithDurations_LockupLinear_Integration_Fuzz_Test:testFuzz_CreateWithDurations((uint40,uint40)) (runs: 50, μ: 283400, ~: 283496) -CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_CreateWithMilestones() (gas: 365507) -CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_CreateWithMilestones_AssetMissingReturnValue() (gas: 372340) -CreateWithMilestones_LockupDynamic_Integration_Fuzz_Test:testFuzz_CreateWithMilestones(address,(address,uint40,bool,address,uint128,address,(address,uint256),(uint128,uint64,uint40)[]),uint256) (runs: 50, μ: 3980454, ~: 3933203) -CreateWithRange_LockupLinear_Integration_Concrete_Test:test_CreateWithRange() (gas: 278259) -CreateWithRange_LockupLinear_Integration_Concrete_Test:test_CreateWithRange_AssetMissingReturnValue() (gas: 285026) -CreateWithRange_LockupLinear_Integration_Fuzz_Test:testFuzz_CreateWithRange(address,(address,address,uint128,address,bool,(uint40,uint40,uint40),(address,uint256)),uint256) (runs: 50, μ: 370254, ~: 369049) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_AllStreamsCold() (gas: 32558) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_AllStreamsNotCancelable() (gas: 579829) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_OnlyNull() (gas: 12366) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_SomeNull() (gas: 78359) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_SomeStreamsCold() (gas: 245143) +CancelMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_SomeStreamsNotCancelable() (gas: 661591) +CancelMultiple_LockupLinear_Integration_Fuzz_Test:testFuzz_CancelMultiple(uint256,uint40) (runs: 50, μ: 801956, ~: 802941) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient() (gas: 391618) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderDoesNotImplementHook() (gas: 377197) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderNotContract() (gas: 100017) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReentrancy() (gas: 379308) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReverts() (gas: 377695) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender() (gas: 386708) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientDoesNotImplementHook() (gas: 372228) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientNotContract() (gas: 97299) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReentrancy() (gas: 374398) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReverts() (gas: 372763) +Cancel_LockupDynamic_Integration_Concrete_Test:test_Cancel_StatusPending() (gas: 76399) +Cancel_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11299) +Cancel_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 87330) +Cancel_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusDepleted() (gas: 65550) +Cancel_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 29268) +Cancel_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamNotCancelable() (gas: 261722) +Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_CallerRecipient(uint256,uint128) (runs: 50, μ: 434849, ~: 435842) +Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_CallerSender(uint256,uint128) (runs: 50, μ: 453227, ~: 455450) +Cancel_LockupDynamic_Integration_Fuzz_Test:testFuzz_Cancel_StatusPending(uint256) (runs: 50, μ: 76963, ~: 77115) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient() (gas: 274846) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderDoesNotImplementHook() (gas: 260354) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderNotContract() (gas: 80371) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReentrancy() (gas: 262451) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerRecipient_SenderReverts() (gas: 260852) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender() (gas: 269878) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientDoesNotImplementHook() (gas: 255372) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientNotContract() (gas: 77649) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReentrancy() (gas: 257528) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_CallerSender_RecipientReverts() (gas: 255907) +Cancel_LockupLinear_Integration_Concrete_Test:test_Cancel_StatusPending() (gas: 76446) +Cancel_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11285) +Cancel_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 78038) +Cancel_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusDepleted() (gas: 65769) +Cancel_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 29373) +Cancel_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamNotCancelable() (gas: 185888) +Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_CallerRecipient(uint256,uint128) (runs: 50, μ: 291315, ~: 291257) +Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_CallerSender(uint256,uint128) (runs: 50, μ: 310015, ~: 310670) +Cancel_LockupLinear_Integration_Fuzz_Test:testFuzz_Cancel_StatusPending(uint256) (runs: 50, μ: 76941, ~: 77016) +ClaimProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_ClaimProtocolRevenues() (gas: 319860) +ClaimProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_ProtocolRevenuesZero() (gas: 18973) +ClaimProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ClaimProtocolRevenues() (gas: 246630) +ClaimProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_RevertGiven_ProtocolRevenuesZero() (gas: 18981) +Constructor_LockupDynamic_Integration_Concrete_Test:test_Constructor() (gas: 5410963) +Constructor_LockupLinear_Integration_Concrete_Test:test_Constructor() (gas: 4216694) +CreateWithDeltas_LockupDynamic_Integration_Concrete_Test:test_CreateWithDeltas() (gas: 380732) +CreateWithDeltas_LockupDynamic_Integration_Fuzz_Test:testFuzz_CreateWithDeltas((uint128,uint64,uint40)[]) (runs: 50, μ: 4100052, ~: 3555804) +CreateWithDurations_LockupLinear_Integration_Concrete_Test:test_CreateWithDurations() (gas: 287745) +CreateWithDurations_LockupLinear_Integration_Fuzz_Test:testFuzz_CreateWithDurations((uint40,uint40)) (runs: 50, μ: 286647, ~: 286702) +CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_CreateWithMilestones() (gas: 370947) +CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_CreateWithMilestones_AssetMissingReturnValue() (gas: 377735) +CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_EndTimeNotInTheFuture() (gas: 47540) +CreateWithMilestones_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_ProtocolFeeTooHigh() (gas: 58079) +CreateWithMilestones_LockupDynamic_Integration_Fuzz_Test:testFuzz_CreateWithMilestones(address,(address,uint40,bool,bool,address,uint128,address,(address,uint256),(uint128,uint64,uint40)[]),uint256) (runs: 50, μ: 4646762, ~: 4503477) +CreateWithRange_LockupLinear_Integration_Concrete_Test:test_CreateWithRange() (gas: 283011) +CreateWithRange_LockupLinear_Integration_Concrete_Test:test_CreateWithRange_AssetMissingReturnValue() (gas: 289778) +CreateWithRange_LockupLinear_Integration_Concrete_Test:test_RevertGiven_EndTimeNotInTheFuture() (gas: 41154) +CreateWithRange_LockupLinear_Integration_Concrete_Test:test_RevertGiven_ProtocolFeeTooHigh() (gas: 51749) +CreateWithRange_LockupLinear_Integration_Fuzz_Test:testFuzz_CreateWithRange(address,(address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)),uint256) (runs: 50, μ: 370169, ~: 370511) FlashFee_Integration_Concrete_Test:test_FlashFee() (gas: 50968) -FlashFee_Integration_Fuzz_Test:testFuzz_FlashFee(uint256,uint256) (runs: 50, μ: 51825, ~: 52081) -FlashFee_Unit_Concrete_Test:test_FlashFee() (gas: 38333) -FlashFee_Unit_Concrete_Test:test_FlashFee_Zero() (gas: 7703) +FlashFee_Integration_Concrete_Test:test_RevertGiven_AssetNotFlashLoanable() (gas: 18626) +FlashFee_Integration_Fuzz_Test:testFuzz_FlashFee(uint256,uint256) (runs: 50, μ: 51839, ~: 52081) FlashLoanFunction_Integration_Concrete_Test:test_FlashLoan() (gas: 402140) -FlashLoanFunction_Integration_Fuzz_Test:testFuzz_FlashLoanFunction(uint256,uint128,bytes) (runs: 50, μ: 403379, ~: 407116) +FlashLoanFunction_Integration_Concrete_Test:test_RevertGiven_AssetNotFlashLoanable() (gas: 21603) +FlashLoanFunction_Integration_Fuzz_Test:testFuzz_FlashLoanFunction(uint256,uint128,bytes) (runs: 50, μ: 403410, ~: 407188) GenerateAccentColor_Integration_Concrete_Test:test_GenerateAccentColor() (gas: 12968) -GetAsset_LockupDynamic_Integration_Concrete_Test:test_GetAsset() (gas: 304908) -GetAsset_LockupLinear_Integration_Concrete_Test:test_GetAsset() (gas: 232195) -GetCliffTime_LockupLinear_Integration_Concrete_Test:test_GetCliffTime() (gas: 232745) -GetDepositedAmount_LockupDynamic_Integration_Concrete_Test:test_GetDepositedAmount() (gas: 307727) -GetDepositedAmount_LockupLinear_Integration_Concrete_Test:test_GetDepositedAmount() (gas: 235010) -GetEndTime_LockupDynamic_Integration_Concrete_Test:test_GetEndTime() (gas: 307525) -GetEndTime_LockupLinear_Integration_Concrete_Test:test_GetEndTime() (gas: 234884) -GetRange_LockupDynamic_Integration_Concrete_Test:test_GetRange() (gas: 306932) -GetRange_LockupLinear_Integration_Concrete_Test:test_GetRange() (gas: 235033) -GetRecipient_LockupDynamic_Integration_Concrete_Test:test_GetRecipient() (gas: 12630) -GetRecipient_LockupLinear_Integration_Concrete_Test:test_GetRecipient() (gas: 12654) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusDepleted() (gas: 360020) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusPending() (gas: 329847) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusSettled() (gas: 335055) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusStreaming() (gas: 335069) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusCanceled() (gas: 374400) -GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusDepleted() (gas: 396242) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusDepleted() (gas: 285519) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusPending() (gas: 255146) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusSettled() (gas: 260354) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusStreaming() (gas: 260368) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusCanceled() (gas: 296443) -GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusDepleted() (gas: 318241) -GetSegments_LockupDynamic_Integration_Concrete_Test:test_GetSegments() (gas: 312411) -GetSender_LockupDynamic_Integration_Concrete_Test:test_GetSender() (gas: 304626) -GetSender_LockupLinear_Integration_Concrete_Test:test_GetSender() (gas: 231929) -GetStartTime_LockupDynamic_Integration_Concrete_Test:test_GetStartTime() (gas: 307832) -GetStartTime_LockupLinear_Integration_Concrete_Test:test_GetStartTime() (gas: 235141) -GetStream_LockupDynamic_Integration_Concrete_Test:test_GetStream() (gas: 275361) -GetStream_LockupDynamic_Integration_Concrete_Test:test_GetStream_StatusSettled() (gas: 51468) -GetStream_LockupLinear_Integration_Concrete_Test:test_GetStream() (gas: 34457) -GetStream_LockupLinear_Integration_Concrete_Test:test_GetStream_StatusSettled() (gas: 38946) -GetWithdrawnAmount_LockupDynamic_Integration_Concrete_Test:test_GetWithdrawnAmount() (gas: 381641) -GetWithdrawnAmount_LockupDynamic_Integration_Concrete_Test:test_GetWithdrawnAmount_NoPreviousWithdrawals() (gas: 333074) -GetWithdrawnAmount_LockupDynamic_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount(uint256,uint128) (runs: 50, μ: 384690, ~: 385328) -GetWithdrawnAmount_LockupDynamic_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount_NoPreviousWithdrawals(uint256) (runs: 50, μ: 334801, ~: 334953) -GetWithdrawnAmount_LockupLinear_Integration_Concrete_Test:test_GetWithdrawnAmount() (gas: 279721) -GetWithdrawnAmount_LockupLinear_Integration_Concrete_Test:test_GetWithdrawnAmount_NoPreviousWithdrawals() (gas: 260373) -GetWithdrawnAmount_LockupLinear_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount(uint256,uint128) (runs: 50, μ: 282907, ~: 282863) -GetWithdrawnAmount_LockupLinear_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount_NoPreviousWithdrawals(uint256) (runs: 50, μ: 262086, ~: 262252) -IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable() (gas: 510191) -IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable_Cold() (gas: 333252) -IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable_StreamCancelable() (gas: 324518) -IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable() (gas: 368272) -IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable_Cold() (gas: 260725) -IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable_StreamCancelable() (gas: 251874) -IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusCanceled() (gas: 373153) -IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusDepleted() (gas: 359721) -IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusPending() (gas: 327808) -IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusSettled() (gas: 333578) -IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusStreaming() (gas: 349896) -IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusCanceled() (gas: 295291) -IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusDepleted() (gas: 285322) -IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusPending() (gas: 255209) -IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusSettled() (gas: 261091) -IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusStreaming() (gas: 261670) -IsDepleted_LockupDynamic_Integration_Concrete_Test:test_IsDepleted() (gas: 359126) -IsDepleted_LockupDynamic_Integration_Concrete_Test:test_IsDepleted_StreamNotDepleted() (gas: 323942) -IsDepleted_LockupLinear_Integration_Concrete_Test:test_IsDepleted() (gas: 284667) -IsDepleted_LockupLinear_Integration_Concrete_Test:test_IsDepleted_StreamNotDepleted() (gas: 251283) -IsStream_LockupDynamic_Integration_Concrete_Test:test_IsStream() (gas: 324260) -IsStream_LockupDynamic_Integration_Concrete_Test:test_IsStream_Null() (gas: 8505) -IsStream_LockupLinear_Integration_Concrete_Test:test_IsStream() (gas: 251601) -IsStream_LockupLinear_Integration_Concrete_Test:test_IsStream_Null() (gas: 8548) -IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusCanceled() (gas: 372669) -IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusDepleted() (gas: 359213) -IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusPending() (gas: 327267) -IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusSettled() (gas: 333145) -IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusStreaming() (gas: 349315) -IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusCanceled() (gas: 294776) -IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusDepleted() (gas: 284776) -IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusPending() (gas: 254630) -IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusSettled() (gas: 260630) -IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusStreaming() (gas: 261051) +GetAsset_LockupDynamic_Integration_Concrete_Test:test_GetAsset() (gas: 307738) +GetAsset_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12049) +GetAsset_LockupLinear_Integration_Concrete_Test:test_GetAsset() (gas: 234488) +GetAsset_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12035) +GetCliffTime_LockupLinear_Integration_Concrete_Test:test_GetCliffTime() (gas: 234972) +GetCliffTime_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11392) +GetDepositedAmount_LockupDynamic_Integration_Concrete_Test:test_GetDepositedAmount() (gas: 310535) +GetDepositedAmount_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11682) +GetDepositedAmount_LockupLinear_Integration_Concrete_Test:test_GetDepositedAmount() (gas: 237259) +GetDepositedAmount_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11678) +GetEndTime_LockupDynamic_Integration_Concrete_Test:test_GetEndTime() (gas: 310333) +GetEndTime_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11538) +GetEndTime_LockupLinear_Integration_Concrete_Test:test_GetEndTime() (gas: 237111) +GetEndTime_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11546) +GetRange_LockupDynamic_Integration_Concrete_Test:test_GetRange() (gas: 309759) +GetRange_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 13125) +GetRange_LockupLinear_Integration_Concrete_Test:test_GetRange() (gas: 237329) +GetRange_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 13308) +GetRecipient_LockupDynamic_Integration_Concrete_Test:test_GetRecipient() (gas: 12585) +GetRecipient_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_NFTBurned() (gas: 72366) +GetRecipient_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 10989) +GetRecipient_LockupLinear_Integration_Concrete_Test:test_GetRecipient() (gas: 12565) +GetRecipient_LockupLinear_Integration_Concrete_Test:test_RevertGiven_NFTBurned() (gas: 72592) +GetRecipient_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 10993) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusDepleted() (gas: 362872) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusPending() (gas: 332677) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusSettled() (gas: 337885) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StatusStreaming() (gas: 337899) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusCanceled() (gas: 377267) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusDepleted() (gas: 399131) +GetRefundedAmount_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12045) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusDepleted() (gas: 287867) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusPending() (gas: 257439) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusSettled() (gas: 262647) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StatusStreaming() (gas: 262661) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusCanceled() (gas: 298747) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_GetRefundedAmount_StreamHasBeenCanceled_StatusDepleted() (gas: 320600) +GetRefundedAmount_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12031) +GetSegments_LockupDynamic_Integration_Concrete_Test:test_GetSegments() (gas: 315237) +GetSegments_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 13758) +GetSender_LockupDynamic_Integration_Concrete_Test:test_GetSender() (gas: 307456) +GetSender_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11814) +GetSender_LockupLinear_Integration_Concrete_Test:test_GetSender() (gas: 234222) +GetSender_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11816) +GetStartTime_LockupDynamic_Integration_Concrete_Test:test_GetStartTime() (gas: 310662) +GetStartTime_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11823) +GetStartTime_LockupLinear_Integration_Concrete_Test:test_GetStartTime() (gas: 237434) +GetStartTime_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11831) +GetStream_LockupDynamic_Integration_Concrete_Test:test_GetStream() (gas: 278699) +GetStream_LockupDynamic_Integration_Concrete_Test:test_GetStream_StatusSettled() (gas: 52024) +GetStream_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 15544) +GetStream_LockupLinear_Integration_Concrete_Test:test_GetStream() (gas: 34920) +GetStream_LockupLinear_Integration_Concrete_Test:test_GetStream_StatusSettled() (gas: 39431) +GetStream_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 14299) +GetWithdrawnAmount_LockupDynamic_Integration_Concrete_Test:test_GetWithdrawnAmount() (gas: 384565) +GetWithdrawnAmount_LockupDynamic_Integration_Concrete_Test:test_GetWithdrawnAmount_NoPreviousWithdrawals() (gas: 335859) +GetWithdrawnAmount_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12012) +GetWithdrawnAmount_LockupDynamic_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount(uint256,uint128) (runs: 50, μ: 387601, ~: 388165) +GetWithdrawnAmount_LockupDynamic_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount_NoPreviousWithdrawals(uint256) (runs: 50, μ: 337603, ~: 337783) +GetWithdrawnAmount_LockupLinear_Integration_Concrete_Test:test_GetWithdrawnAmount() (gas: 282047) +GetWithdrawnAmount_LockupLinear_Integration_Concrete_Test:test_GetWithdrawnAmount_NoPreviousWithdrawals() (gas: 262621) +GetWithdrawnAmount_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11998) +GetWithdrawnAmount_LockupLinear_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount(uint256,uint128) (runs: 50, μ: 285233, ~: 285189) +GetWithdrawnAmount_LockupLinear_Integration_Fuzz_Test:testFuzz_GetWithdrawnAmount_NoPreviousWithdrawals(uint256) (runs: 50, μ: 264296, ~: 264259) +IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable() (gas: 515823) +IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable_Cold() (gas: 336082) +IsCancelable_LockupDynamic_Integration_Concrete_Test:test_IsCancelable_StreamCancelable() (gas: 327326) +IsCancelable_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11239) +IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable() (gas: 372821) +IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable_Cold() (gas: 262996) +IsCancelable_LockupLinear_Integration_Concrete_Test:test_IsCancelable_StreamCancelable() (gas: 254123) +IsCancelable_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11263) +IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusCanceled() (gas: 375998) +IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusDepleted() (gas: 362551) +IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusPending() (gas: 330616) +IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusSettled() (gas: 336386) +IsCold_LockupDynamic_Integration_Concrete_Test:test_IsCold_StatusStreaming() (gas: 352696) +IsCold_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11558) +IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusCanceled() (gas: 297529) +IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusDepleted() (gas: 287604) +IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusPending() (gas: 257436) +IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusSettled() (gas: 263318) +IsCold_LockupLinear_Integration_Concrete_Test:test_IsCold_StatusStreaming() (gas: 263853) +IsCold_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11601) +IsDepleted_LockupDynamic_Integration_Concrete_Test:test_IsDepleted() (gas: 361956) +IsDepleted_LockupDynamic_Integration_Concrete_Test:test_IsDepleted_StreamNotDepleted() (gas: 326750) +IsDepleted_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11191) +IsDepleted_LockupLinear_Integration_Concrete_Test:test_IsDepleted() (gas: 286971) +IsDepleted_LockupLinear_Integration_Concrete_Test:test_IsDepleted_StreamNotDepleted() (gas: 253532) +IsDepleted_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11212) +IsStream_LockupDynamic_Integration_Concrete_Test:test_IsStream() (gas: 327090) +IsStream_LockupDynamic_Integration_Concrete_Test:test_IsStream_Null() (gas: 8527) +IsStream_LockupLinear_Integration_Concrete_Test:test_IsStream() (gas: 253894) +IsStream_LockupLinear_Integration_Concrete_Test:test_IsStream_Null() (gas: 8570) +IsTransferable_LockupDynamic_Integration_Concrete_Test:test_IsTransferrable_Stream() (gas: 327274) +IsTransferable_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11674) +IsTransferable_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamTransferNotEnabled() (gas: 515789) +IsTransferable_LockupLinear_Integration_Concrete_Test:test_IsTransferrable_Stream() (gas: 254100) +IsTransferable_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11739) +IsTransferable_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamTransferNotEnabled() (gas: 372843) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusCanceled() (gas: 375536) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusDepleted() (gas: 362065) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusPending() (gas: 330053) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusSettled() (gas: 335997) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_IsWarm_StatusStreaming() (gas: 352181) +IsWarm_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11118) +IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusCanceled() (gas: 297036) +IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusDepleted() (gas: 287080) +IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusPending() (gas: 256835) +IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusSettled() (gas: 262901) +IsWarm_LockupLinear_Integration_Concrete_Test:test_IsWarm_StatusStreaming() (gas: 263300) +IsWarm_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11139) MapSymbol_Integration_Concrete_Test:test_MapSymbol_LockupDynamic() (gas: 16959) -MapSymbol_Integration_Concrete_Test:test_MapSymbol_LockupLinear() (gas: 16777) +MapSymbol_Integration_Concrete_Test:test_MapSymbol_LockupLinear() (gas: 16733) +MapSymbol_Integration_Concrete_Test:test_RevertGiven_UnknownNFT() (gas: 1037150) MaxFlashLoan_Integration_Concrete_Test:test_MaxFlashLoan() (gas: 178987) MaxFlashLoan_Integration_Concrete_Test:test_MaxFlashLoan_AssetNotFlashLoanable() (gas: 15248) -MaxFlashLoan_Integration_Fuzz_Test:testFuzz_MaxFlashLoan(uint256) (runs: 50, μ: 178980, ~: 178996) +MaxFlashLoan_Integration_Fuzz_Test:testFuzz_MaxFlashLoan(uint256) (runs: 50, μ: 178984, ~: 179004) ProtocolFees_Integration_Concrete_Test:test_ProtocolFees() (gas: 41254) ProtocolFees_Integration_Concrete_Test:test_ProtocolFees_ProtocolFeeNotSet() (gas: 9943) -ProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_ProtocolRevenues() (gas: 317399) +ProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_ProtocolRevenues() (gas: 320207) ProtocolRevenues_LockupDynamic_Integration_Concrete_Test:test_ProtocolRevenues_ProtocolRevenuesZero() (gas: 10125) -ProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ProtocolRevenues() (gas: 244717) -ProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ProtocolRevenues_ProtocolRevenuesZero() (gas: 10133) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusDepleted() (gas: 359163) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusPending() (gas: 333012) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusSettled() (gas: 333005) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusStreaming() (gas: 339838) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 372545) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 395772) -RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamNotCancelable() (gas: 517772) -RefundableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_RefundableAmountOf(uint256) (runs: 50, μ: 46751, ~: 30742) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusDepleted() (gas: 284678) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusPending() (gas: 260318) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusSettled() (gas: 260441) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusStreaming() (gas: 261928) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 294604) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 317787) -RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamNotCancelable() (gas: 375836) -RefundableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_RefundableAmountOf(uint256) (runs: 50, μ: 30756, ~: 30880) -Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce() (gas: 685980) -Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientDoesNotImplementHook() (gas: 678983) -Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientNotContract() (gas: 289776) -Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientReentrancy() (gas: 684192) -Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientReverts() (gas: 679634) -Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce() (gas: 474755) -Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientDoesNotImplementHook() (gas: 467756) -Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientNotContract() (gas: 217209) -Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientReentrancy() (gas: 473025) -Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientReverts() (gas: 468407) +ProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ProtocolRevenues() (gas: 246966) +ProtocolRevenues_LockupLinear_Integration_Concrete_Test:test_ProtocolRevenues_ProtocolRevenuesZero() (gas: 10111) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusDepleted() (gas: 361993) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusPending() (gas: 335820) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusSettled() (gas: 335813) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StatusStreaming() (gas: 342682) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 375412) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 398639) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RefundableAmountOf_StreamNotCancelable() (gas: 523449) +RefundableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11099) +RefundableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_RefundableAmountOf(uint256) (runs: 50, μ: 48250, ~: 63808) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusDepleted() (gas: 287004) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusPending() (gas: 262589) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusSettled() (gas: 262712) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StatusStreaming() (gas: 264199) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 296908) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 320124) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RefundableAmountOf_StreamNotCancelable() (gas: 380452) +RefundableAmountOf_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11110) +RefundableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_RefundableAmountOf(uint256) (runs: 50, μ: 30700, ~: 30858) +Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce() (gas: 694529) +Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientDoesNotImplementHook() (gas: 687576) +Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientNotContract() (gas: 292583) +Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientReentrancy() (gas: 692741) +Renounce_LockupDynamic_Integration_Concrete_Test:test_Renounce_RecipientReverts() (gas: 688183) +Renounce_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11564) +Renounce_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 87127) +Renounce_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusDepleted() (gas: 68421) +Renounce_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 24707) +Renounce_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamNotCancelable() (gas: 649813) +Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce() (gas: 481658) +Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientDoesNotImplementHook() (gas: 474703) +Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientNotContract() (gas: 219414) +Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientReentrancy() (gas: 479840) +Renounce_LockupLinear_Integration_Concrete_Test:test_Renounce_RecipientReverts() (gas: 475310) +Renounce_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11575) +Renounce_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusCanceled() (gas: 77847) +Renounce_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusDepleted() (gas: 68656) +Renounce_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StatusSettled() (gas: 24822) +Renounce_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamNotCancelable() (gas: 436988) SafeAssetDecimals_Integration_Concrete_Test:test_SafeAssetDecimals() (gas: 12117) SafeAssetDecimals_Integration_Concrete_Test:test_SafeAssetDecimals_DecimalsNotImplemented() (gas: 10852) SafeAssetDecimals_Integration_Concrete_Test:test_SafeAssetDecimals_EOA() (gas: 11625) @@ -178,125 +271,155 @@ SafeAssetSymbol_Integration_Concrete_Test:test_SafeAssetSymbol_LongSymbol() (gas SafeAssetSymbol_Integration_Concrete_Test:test_SafeAssetSymbol_SymbolNotImplemented() (gas: 12399) SetComptroller_LockupDynamic_Integration_Concrete_Test:test_SetComptroller_NewComptroller() (gas: 309153) SetComptroller_LockupDynamic_Integration_Concrete_Test:test_SetComptroller_SameComptroller() (gas: 23283) -SetComptroller_LockupLinear_Integration_Concrete_Test:test_SetComptroller_NewComptroller() (gas: 309238) -SetComptroller_LockupLinear_Integration_Concrete_Test:test_SetComptroller_SameComptroller() (gas: 23368) -SetFlashFee_Integration_Concrete_Test:test_SetFlashFee() (gas: 44409) -SetFlashFee_Integration_Concrete_Test:test_SetFlashFee_SameFee() (gas: 21981) -SetFlashFee_Integration_Fuzz_Test:testFuzz_SetFlashFee(uint256) (runs: 50, μ: 37754, ~: 39448) -SetNFTDescriptor_LockupDynamic_Integration_Concrete_Test:test_SetNFTDescriptor_NewNFTDescriptor() (gas: 6558206) -SetNFTDescriptor_LockupDynamic_Integration_Concrete_Test:test_SetNFTDescriptor_SameNFTDescriptor() (gas: 2259730) -SetNFTDescriptor_LockupLinear_Integration_Concrete_Test:test_SetNFTDescriptor_NewNFTDescriptor() (gas: 6557611) -SetNFTDescriptor_LockupLinear_Integration_Concrete_Test:test_SetNFTDescriptor_SameNFTDescriptor() (gas: 2259015) +SetComptroller_LockupLinear_Integration_Concrete_Test:test_SetComptroller_NewComptroller() (gas: 309150) +SetComptroller_LockupLinear_Integration_Concrete_Test:test_SetComptroller_SameComptroller() (gas: 23280) +SetFlashFee_Integration_Fuzz_Test:testFuzz_SetFlashFee(uint256) (runs: 50, μ: 37809, ~: 40020) +SetNFTDescriptor_LockupDynamic_Integration_Concrete_Test:test_SetNFTDescriptor_NewNFTDescriptor() (gas: 6542473) +SetNFTDescriptor_LockupDynamic_Integration_Concrete_Test:test_SetNFTDescriptor_SameNFTDescriptor() (gas: 2251619) +SetNFTDescriptor_LockupLinear_Integration_Concrete_Test:test_SetNFTDescriptor_NewNFTDescriptor() (gas: 6541265) +SetNFTDescriptor_LockupLinear_Integration_Concrete_Test:test_SetNFTDescriptor_SameNFTDescriptor() (gas: 2250276) SetProtocolFee_Integration_Concrete_Test:test_SetProtocolFee() (gas: 47804) SetProtocolFee_Integration_Concrete_Test:test_SetProtocolFee_SameFee() (gas: 22636) -SetProtocolFee_Integration_Fuzz_Test:testFuzz_SetProtocolFee(uint256) (runs: 50, μ: 43131, ~: 43074) -StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf() (gas: 349974) -StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_AssetsFullyWithdrawn() (gas: 359860) -StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_RefundableAmountNotZero() (gas: 333790) -StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_StartTimeInTheFuture() (gas: 327889) -StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_StreamCanceled() (gas: 373305) -StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf() (gas: 261080) -StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_AssetsFullyWithdrawn() (gas: 285393) -StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_RefundableAmountNotZero() (gas: 261245) -StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_StartTimeInTheFuture() (gas: 255222) -StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_StreamCanceled() (gas: 295382) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_CurrentMilestone1st() (gas: 45895) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_CurrentMilestoneNot1st() (gas: 50716) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_OneSegment() (gas: 254129) +SetProtocolFee_Integration_Fuzz_Test:testFuzz_SetProtocolFee(uint256) (runs: 50, μ: 43089, ~: 43074) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11684) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf() (gas: 352818) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_AssetsFullyWithdrawn() (gas: 362690) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_RefundableAmountNotZero() (gas: 336598) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_StartTimeInTheFuture() (gas: 330697) +StatusOf_LockupDynamic_Integration_Concrete_Test:test_StatusOf_StreamCanceled() (gas: 376172) +StatusOf_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11714) +StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf() (gas: 263351) +StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_AssetsFullyWithdrawn() (gas: 287719) +StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_RefundableAmountNotZero() (gas: 263516) +StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_StartTimeInTheFuture() (gas: 257493) +StatusOf_LockupLinear_Integration_Concrete_Test:test_StatusOf_StreamCanceled() (gas: 297686) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11319) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_CurrentMilestone1st() (gas: 45931) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_CurrentMilestoneNot1st() (gas: 50774) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_OneSegment() (gas: 257003) StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StartTimeInTheFuture() (gas: 20230) StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StartTimeInThePresent() (gas: 25593) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StatusDepleted() (gas: 68727) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StatusDepleted() (gas: 68749) StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StatusPending() (gas: 20360) StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StatusSettled() (gas: 26624) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 87497) -StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 116148) -StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Calculation((uint128,uint64,uint40)[],uint40) (runs: 50, μ: 3521477, ~: 3128962) -StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Monotonicity((uint128,uint64,uint40)[],uint40,uint40) (runs: 50, μ: 3965669, ~: 4101937) -StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_OneSegment((uint128,uint64,uint40),uint40) (runs: 50, μ: 274310, ~: 268277) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInTheFuture() (gas: 26302) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInThePast() (gas: 17313) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInThePresent() (gas: 27143) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusDepleted() (gas: 68936) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusPending() (gas: 20327) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusSettled() (gas: 26710) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 78272) -StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 106846) -StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Calculation(uint40,uint128) (runs: 50, μ: 232343, ~: 233061) -StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_CliffTimeInTheFuture(uint40) (runs: 50, μ: 27377, ~: 27626) -StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Monotonicity(uint40,uint40,uint128) (runs: 50, μ: 237382, ~: 239360) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 87534) +StreamedAmountOf_LockupDynamic_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 116207) +StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Calculation((uint128,uint64,uint40)[],uint40) (runs: 50, μ: 3520440, ~: 3134690) +StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Monotonicity((uint128,uint64,uint40)[],uint40,uint40) (runs: 50, μ: 3969098, ~: 4086928) +StreamedAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_OneSegment((uint128,uint64,uint40),uint40) (runs: 50, μ: 276308, ~: 270719) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 11349) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInTheFuture() (gas: 26236) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInThePast() (gas: 17291) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_CliffTimeInThePresent() (gas: 27121) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusDepleted() (gas: 68969) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusPending() (gas: 20305) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StatusSettled() (gas: 26688) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 78261) +StreamedAmountOf_LockupLinear_Integration_Concrete_Test:test_StreamedAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 106890) +StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Calculation(uint40,uint128) (runs: 50, μ: 234531, ~: 235187) +StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_CliffTimeInTheFuture(uint40) (runs: 50, μ: 27397, ~: 27604) +StreamedAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_StreamedAmountOf_Monotonicity(uint40,uint40,uint128) (runs: 50, μ: 239328, ~: 241463) ToggleFlashAsset_Integration_Concrete_Test:test_ToggleFlashAsset() (gas: 31848) ToggleFlashAsset_Integration_Concrete_Test:test_ToggleFlashAsset_FlagNotEnabled() (gas: 41868) -TokenURI_LockupDynamic_Integration_Concrete_Test:test_TokenURI_Decoded() (gas: 3422904) -TokenURI_LockupDynamic_Integration_Concrete_Test:test_TokenURI_Full() (gas: 2743187) -TokenURI_LockupLinear_Integration_Concrete_Test:test_TokenURI_Decoded() (gas: 3341348) -TokenURI_LockupLinear_Integration_Concrete_Test:test_TokenURI_Full() (gas: 2661789) -WasCanceled_LockupDynamic_Integration_Concrete_Test:test_WasCanceled() (gas: 361404) -WasCanceled_LockupDynamic_Integration_Concrete_Test:test_WasCanceled_StreamNotCanceled() (gas: 324810) -WasCanceled_LockupLinear_Integration_Concrete_Test:test_WasCanceled() (gas: 286684) -WasCanceled_LockupLinear_Integration_Concrete_Test:test_WasCanceled_StreamNotCanceled() (gas: 252129) -WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_WithdrawMaxAndTransfer() (gas: 153323) -WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_WithdrawMaxAndTransfer_WithdrawableAmountZero() (gas: 99935) -WithdrawMaxAndTransfer_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMaxAndTransfer(uint256,address) (runs: 50, μ: 131864, ~: 151107) -WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_WithdrawMaxAndTransfer() (gas: 106420) -WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_WithdrawMaxAndTransfer_WithdrawableAmountZero() (gas: 100091) -WithdrawMaxAndTransfer_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMaxAndTransfer(uint256,address) (runs: 50, μ: 96364, ~: 106586) -WithdrawMax_LockupDynamic_Integration_Concrete_Test:test_WithdrawMax() (gas: 134454) -WithdrawMax_LockupDynamic_Integration_Concrete_Test:test_WithdrawMax_EndTimeNotInTheFuture() (gas: 79700) -WithdrawMax_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMax(uint256) (runs: 50, μ: 116746, ~: 119825) -WithdrawMax_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMax_EndTimeNotInTheFuture(uint256) (runs: 50, μ: 82256, ~: 82383) -WithdrawMax_LockupLinear_Integration_Concrete_Test:test_WithdrawMax() (gas: 73906) -WithdrawMax_LockupLinear_Integration_Concrete_Test:test_WithdrawMax_EndTimeNotInTheFuture() (gas: 80006) -WithdrawMax_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMax(uint256) (runs: 50, μ: 72863, ~: 73017) -WithdrawMax_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMax_EndTimeNotInTheFuture(uint256) (runs: 50, μ: 82507, ~: 82689) -WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_WithdrawMultiple() (gas: 1805869) -WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_WithdrawMultiple_ArrayCountsZero() (gas: 9087) -WithdrawMultiple_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMultiple(uint256,address,uint128) (runs: 50, μ: 2707361, ~: 2707710) -WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_WithdrawMultiple() (gas: 1242199) +TokenURI_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_NFTDoesNotExist() (gas: 13542) +TokenURI_LockupDynamic_Integration_Concrete_Test:test_TokenURI_Decoded() (gas: 5031712) +TokenURI_LockupDynamic_Integration_Concrete_Test:test_TokenURI_Full() (gas: 2738320) +TokenURI_LockupLinear_Integration_Concrete_Test:test_RevertGiven_NFTDoesNotExist() (gas: 13525) +TokenURI_LockupLinear_Integration_Concrete_Test:test_TokenURI_Decoded() (gas: 4949035) +TokenURI_LockupLinear_Integration_Concrete_Test:test_TokenURI_Full() (gas: 2656181) +TransferFrom_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamNotTransferable() (gas: 314189) +TransferFrom_LockupDynamic_Integration_Concrete_Test:test_TransferFrom() (gas: 326528) +TransferFrom_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamNotTransferable() (gas: 240381) +TransferFrom_LockupLinear_Integration_Concrete_Test:test_TransferFrom() (gas: 253258) +WasCanceled_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12048) +WasCanceled_LockupDynamic_Integration_Concrete_Test:test_WasCanceled() (gas: 364234) +WasCanceled_LockupDynamic_Integration_Concrete_Test:test_WasCanceled_StreamNotCanceled() (gas: 327640) +WasCanceled_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12069) +WasCanceled_LockupLinear_Integration_Concrete_Test:test_WasCanceled() (gas: 288988) +WasCanceled_LockupLinear_Integration_Concrete_Test:test_WasCanceled_StreamNotCanceled() (gas: 254422) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_NFTBurned() (gas: 75279) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 14162) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamNotTransferable() (gas: 265080) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_WithdrawMaxAndTransfer() (gas: 156711) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Concrete_Test:test_WithdrawMaxAndTransfer_WithdrawableAmountZero() (gas: 101492) +WithdrawMaxAndTransfer_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMaxAndTransfer(uint256,address) (runs: 50, μ: 131073, ~: 112693) +WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_RevertGiven_NFTBurned() (gas: 75509) +WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 14170) +WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamNotTransferable() (gas: 189310) +WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_WithdrawMaxAndTransfer() (gas: 109710) +WithdrawMaxAndTransfer_LockupLinear_Integration_Concrete_Test:test_WithdrawMaxAndTransfer_WithdrawableAmountZero() (gas: 101736) +WithdrawMaxAndTransfer_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMaxAndTransfer(uint256,address) (runs: 50, μ: 99903, ~: 108188) +WithdrawMax_LockupDynamic_Integration_Concrete_Test:test_WithdrawMax() (gas: 134665) +WithdrawMax_LockupDynamic_Integration_Concrete_Test:test_WithdrawMax_EndTimeNotInTheFuture() (gas: 79744) +WithdrawMax_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMax(uint256) (runs: 50, μ: 116864, ~: 119983) +WithdrawMax_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMax_EndTimeNotInTheFuture(uint256) (runs: 50, μ: 82259, ~: 82427) +WithdrawMax_LockupLinear_Integration_Concrete_Test:test_WithdrawMax() (gas: 74005) +WithdrawMax_LockupLinear_Integration_Concrete_Test:test_WithdrawMax_EndTimeNotInTheFuture() (gas: 80017) +WithdrawMax_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMax(uint256) (runs: 50, μ: 72948, ~: 73116) +WithdrawMax_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMax_EndTimeNotInTheFuture(uint256) (runs: 50, μ: 82490, ~: 82584) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_AllStatusesDepleted() (gas: 73926) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_OnlyNull() (gas: 21069) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_SomeNull() (gas: 124805) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_SomeStatusesDepleted() (gas: 83399) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_WithdrawMultiple() (gas: 1823420) +WithdrawMultiple_LockupDynamic_Integration_Concrete_Test:test_WithdrawMultiple_ArrayCountsZero() (gas: 9109) +WithdrawMultiple_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawMultiple(uint256,address,uint128) (runs: 50, μ: 2741367, ~: 2742123) +WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_AllStatusesDepleted() (gas: 74068) +WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_OnlyNull() (gas: 20978) +WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_SomeNull() (gas: 105128) +WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_RevertGiven_SomeStatusesDepleted() (gas: 83541) +WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_WithdrawMultiple() (gas: 1256080) WithdrawMultiple_LockupLinear_Integration_Concrete_Test:test_WithdrawMultiple_ArrayCountsZero() (gas: 9126) -WithdrawMultiple_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMultiple(uint256,address,uint128) (runs: 50, μ: 1742432, ~: 1742287) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw() (gas: 381705) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_CallerApprovedOperator() (gas: 112523) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_CallerRecipient() (gas: 81082) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_EndTimeNotInTheFuture() (gas: 72554) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientDoesNotImplementHook() (gas: 359872) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientNotContract() (gas: 122112) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientReentrancy() (gas: 387067) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientReverts() (gas: 360427) -Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_StreamHasBeenCanceled() (gas: 379300) -Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw(uint256,address,uint128) (runs: 50, μ: 125749, ~: 98023) -Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_CallerApprovedOperator(address) (runs: 50, μ: 145230, ~: 145230) -Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_SegmentFuzing(((uint128,uint64,uint40)[],uint256,address)) (runs: 50, μ: 3950416, ~: 3852837) -Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_StreamHasBeenCanceled(uint256,address,uint128) (runs: 50, μ: 158615, ~: 158813) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw() (gas: 265613) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_CallerApprovedOperator() (gas: 92923) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_CallerRecipient() (gas: 61471) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_EndTimeNotInTheFuture() (gas: 72822) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientDoesNotImplementHook() (gas: 257393) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientNotContract() (gas: 75290) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientReentrancy() (gas: 270988) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientReverts() (gas: 257948) -Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_StreamHasBeenCanceled() (gas: 290354) -Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw(uint256,address,uint128) (runs: 50, μ: 98763, ~: 98632) -Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw_CallerApprovedOperator(address) (runs: 50, μ: 112042, ~: 112042) -Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw_StreamHasBeenCanceled(uint256,address,uint128) (runs: 50, μ: 139114, ~: 139033) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf() (gas: 375341) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_NoPreviousWithdrawals() (gas: 344798) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StartTimeInThePresent() (gas: 334407) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusDepleted() (gas: 360935) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusPending() (gas: 331156) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusSettled() (gas: 337357) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 375385) -WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 397521) -WithdrawableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf(uint40,uint128) (runs: 50, μ: 332813, ~: 349508) -WithdrawableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_NoPreviousWithdrawals(uint40) (runs: 50, μ: 294637, ~: 286681) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_CliffTimeInTheFuture() (gas: 251328) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_NoPreviousWithdrawals() (gas: 261221) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusDepleted() (gas: 286431) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusPending() (gas: 256422) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusSettled() (gas: 262753) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 297470) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 319562) -WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_WithWithdrawals() (gas: 284809) -WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf(uint40,uint128,uint128) (runs: 50, μ: 458973, ~: 459024) -WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_CliffTimeInTheFuture(uint40) (runs: 50, μ: 261387, ~: 261691) -WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_NoPreviousWithdrawals(uint40,uint128) (runs: 50, μ: 435199, ~: 436054) +WithdrawMultiple_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawMultiple(uint256,address,uint128) (runs: 50, μ: 1770198, ~: 1770012) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 19909) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_StreamDepleted() (gas: 67687) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw() (gas: 384728) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_CallerApprovedOperator() (gas: 112603) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_CallerRecipient() (gas: 81162) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_EndTimeNotInTheFuture() (gas: 72576) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientDoesNotImplementHook() (gas: 362862) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientNotContract() (gas: 122264) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientReentrancy() (gas: 390093) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_RecipientReverts() (gas: 363417) +Withdraw_LockupDynamic_Integration_Concrete_Test:test_Withdraw_StreamHasBeenCanceled() (gas: 382275) +Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw(uint256,address,uint128) (runs: 50, μ: 123360, ~: 98089) +Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_CallerApprovedOperator(address) (runs: 50, μ: 145346, ~: 145346) +Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_SegmentFuzing(((uint128,uint64,uint40)[],uint256,address)) (runs: 50, μ: 3957016, ~: 3848156) +Withdraw_LockupDynamic_Integration_Fuzz_Test:testFuzz_Withdraw_StreamHasBeenCanceled(uint256,address,uint128) (runs: 50, μ: 158686, ~: 158963) +Withdraw_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 19917) +Withdraw_LockupLinear_Integration_Concrete_Test:test_RevertGiven_StreamDepleted() (gas: 67928) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw() (gas: 268028) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_CallerApprovedOperator() (gas: 93000) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_CallerRecipient() (gas: 61548) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_EndTimeNotInTheFuture() (gas: 72811) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientDoesNotImplementHook() (gas: 259830) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientNotContract() (gas: 75345) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientReentrancy() (gas: 273458) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_RecipientReverts() (gas: 260385) +Withdraw_LockupLinear_Integration_Concrete_Test:test_Withdraw_StreamHasBeenCanceled() (gas: 292783) +Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw(uint256,address,uint128) (runs: 50, μ: 98684, ~: 98686) +Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw_CallerApprovedOperator(address) (runs: 50, μ: 112119, ~: 112119) +Withdraw_LockupLinear_Integration_Fuzz_Test:testFuzz_Withdraw_StreamHasBeenCanceled(uint256,address,uint128) (runs: 50, μ: 139252, ~: 139121) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12045) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf() (gas: 378217) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_NoPreviousWithdrawals() (gas: 347660) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StartTimeInThePresent() (gas: 337237) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusDepleted() (gas: 363787) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusPending() (gas: 333986) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusSettled() (gas: 340209) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 378252) +WithdrawableAmountOf_LockupDynamic_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 400432) +WithdrawableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf(uint40,uint128) (runs: 50, μ: 332238, ~: 313851) +WithdrawableAmountOf_LockupDynamic_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_NoPreviousWithdrawals(uint40) (runs: 50, μ: 298230, ~: 289755) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_RevertGiven_Null() (gas: 12076) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_CliffTimeInTheFuture() (gas: 253643) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_NoPreviousWithdrawals() (gas: 263514) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusDepleted() (gas: 288779) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusPending() (gas: 258715) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StatusSettled() (gas: 265068) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusCanceled() (gas: 299774) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_StreamHasBeenCanceled_StatusDepleted() (gas: 321876) +WithdrawableAmountOf_LockupLinear_Integration_Concrete_Test:test_WithdrawableAmountOf_WithWithdrawals() (gas: 287157) +WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf(uint40,uint128,uint128) (runs: 50, μ: 464146, ~: 464993) +WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_CliffTimeInTheFuture(uint40) (runs: 50, μ: 263735, ~: 263984) +WithdrawableAmountOf_LockupLinear_Integration_Fuzz_Test:testFuzz_WithdrawableAmountOf_NoPreviousWithdrawals(uint40,uint128) (runs: 50, μ: 440223, ~: 441015) \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index d788a459c..0f575053b 100644 --- a/foundry.toml +++ b/foundry.toml @@ -16,7 +16,7 @@ out = "out" script = "script" sender = "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38" - solc = "0.8.19" + solc = "0.8.21" src = "src" test = "test" @@ -53,7 +53,9 @@ [profile.smt.model_checker] engine = "chc" # constrained Horn clauses invariants = ["contract", "reentrancy"] + show_proved_safe = true show_unproved = true + show_unsupported = true timeout = 100_000 # in milliseconds, per solving query targets = [ "assert", diff --git a/script/Base.s.sol b/script/Base.s.sol index 53c814f2a..32b96a58e 100644 --- a/script/Base.s.sol +++ b/script/Base.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { Script } from "forge-std/Script.sol"; diff --git a/script/DeployComptroller.s.sol b/script/DeployComptroller.s.sol index ee8fd0843..cfeb4769c 100644 --- a/script/DeployComptroller.s.sol +++ b/script/DeployComptroller.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; diff --git a/script/DeployCore.s.sol b/script/DeployCore.s.sol index a53aa44d5..cb70fa7a1 100644 --- a/script/DeployCore.s.sol +++ b/script/DeployCore.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; import { SablierV2LockupDynamic } from "../src/SablierV2LockupDynamic.sol"; diff --git a/script/DeployCore2.s.sol b/script/DeployCore2.s.sol index f448eb466..0752639c1 100644 --- a/script/DeployCore2.s.sol +++ b/script/DeployCore2.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; diff --git a/script/DeployDeterministicComptroller.s.sol b/script/DeployDeterministicComptroller.s.sol index 35e07cff2..e609d960c 100644 --- a/script/DeployDeterministicComptroller.s.sol +++ b/script/DeployDeterministicComptroller.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; diff --git a/script/DeployDeterministicCore.s.sol b/script/DeployDeterministicCore.s.sol index 4aff58a0b..617090829 100644 --- a/script/DeployDeterministicCore.s.sol +++ b/script/DeployDeterministicCore.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; import { SablierV2LockupDynamic } from "../src/SablierV2LockupDynamic.sol"; diff --git a/script/DeployDeterministicCore2.s.sol b/script/DeployDeterministicCore2.s.sol index 32fe3c3a9..9a5805e32 100644 --- a/script/DeployDeterministicCore2.s.sol +++ b/script/DeployDeterministicCore2.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; import { SablierV2Comptroller } from "../src/SablierV2Comptroller.sol"; diff --git a/script/DeployDeterministicLockupDynamic.s.sol b/script/DeployDeterministicLockupDynamic.s.sol index 343188f76..4440a16f2 100644 --- a/script/DeployDeterministicLockupDynamic.s.sol +++ b/script/DeployDeterministicLockupDynamic.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2Comptroller } from "../src/interfaces/ISablierV2Comptroller.sol"; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; diff --git a/script/DeployDeterministicLockupLinear.s.sol b/script/DeployDeterministicLockupLinear.s.sol index 13502258b..b2a4edb4d 100644 --- a/script/DeployDeterministicLockupLinear.s.sol +++ b/script/DeployDeterministicLockupLinear.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2Comptroller } from "../src/interfaces/ISablierV2Comptroller.sol"; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; diff --git a/script/DeployLockupDynamic.s.sol b/script/DeployLockupDynamic.s.sol index 3af0a7088..5e9f0098e 100644 --- a/script/DeployLockupDynamic.s.sol +++ b/script/DeployLockupDynamic.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2Comptroller } from "../src/interfaces/ISablierV2Comptroller.sol"; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; diff --git a/script/DeployLockupLinear.s.sol b/script/DeployLockupLinear.s.sol index 813e36877..b3af99d1b 100644 --- a/script/DeployLockupLinear.s.sol +++ b/script/DeployLockupLinear.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { ISablierV2Comptroller } from "../src/interfaces/ISablierV2Comptroller.sol"; import { ISablierV2NFTDescriptor } from "../src/interfaces/ISablierV2NFTDescriptor.sol"; diff --git a/script/GenerateSVG.s.sol b/script/GenerateSVG.s.sol index ed568de6b..3255632b4 100644 --- a/script/GenerateSVG.s.sol +++ b/script/GenerateSVG.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; diff --git a/script/Init.s.sol b/script/Init.s.sol index 1e4f293b1..d5a970f28 100644 --- a/script/Init.s.sol +++ b/script/Init.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/test/utils/Precompiles.sol b/test/utils/Precompiles.sol index a1e066d5d..c3f5c4952 100644 --- a/test/utils/Precompiles.sol +++ b/test/utils/Precompiles.sol @@ -27,11 +27,11 @@ contract Precompiles { bytes public constant BYTECODE_COMPTROLLER = hex"60803461009857601f6104a638819003918201601f19168301916001600160401b0383118484101761009d5780849260209460405283398101031261009857516001600160a01b0381169081900361009857600080546001600160a01b0319168217815560405191907fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a36103f290816100b48239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060408181526004918236101561001657600080fd5b600092833560e01c9182634d81e51d1461039d5750816375829def146102e5578163907a267b14610253578163b5b3ca2c146101ab578163cb01e30e146100f957508063dcf844a7146100c3578063e07df5b4146100a55763f851a4401461007d57600080fd5b346100a157816003193601126100a1576001600160a01b0360209254169051908152f35b5080fd5b50346100a157816003193601126100a1576020906001549051908152f35b50346100a15760203660031901126100a157806020926001600160a01b036100e96103d7565b1681526003845220549051908152f35b9050346101a75760203660031901126101a7576101146103d7565b6001600160a01b03918285541633810361017a575050169081835260026020528083209081549160ff8316159260ff84169060ff1916179055519081527f8cd3a7bc46b26a3b0c07a05a47af78abcaa647626f631d92ea64f8867b23bbec60203392a380f35b84516331b339a960e21b81526001600160a01b039091169181019182523360208301529081906040010390fd5b8280fd5b9050346101a757816003193601126101a7576101c56103d7565b90602435916001600160a01b039182865416338103610226575050907f371789a3d97098f3070492613273a065a7e8a19e009fd1ae92a4b4d4c71ed62d9116928385526003602052808520928084549455815193845260208401523392a380f35b85516331b339a960e21b81526001600160a01b039091169181019182523360208301529081906040010390fd5b919050346101a75760203660031901126101a7578135916001600160a01b038454163381036102b85750507fc059ba3e07a1c4d1fa8845bdb2af2dd85e844684e0a59e6073499e4338788465906001549280600155815193845260208401523392a280f35b82516331b339a960e21b81526001600160a01b039091169181019182523360208301529081906040010390fd5b919050346101a75760203660031901126101a7578135916001600160a01b03918284168094036103995784549283169033820361036d575050507fffffffffffffffffffffffff00000000000000000000000000000000000000001681178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b516331b339a960e21b81526001600160a01b039091169181019182523360208301529081906040010390fd5b8480fd5b849084346101a75760203660031901126101a75760ff906020936001600160a01b036103c76103d7565b1681526002855220541615158152f35b600435906001600160a01b03821682036103ed57565b600080fd"; bytes public constant BYTECODE_LOCKUP_DYNAMIC = - hex"60c0346200046e57601f62005ef938819003918201601f19168301916001600160401b038311848410176200032b578084926080946040528339810103126200046e5780516001600160a01b038082169290918390036200046e5760208101518281168091036200046e5760408201519183831683036200046e5760600151936200008962000473565b90601d82527f5361626c696572205632204c6f636b75702044796e616d6963204e46540000006020830152620000be62000473565b601181527029a0a116ab1916a627a1a5aaa816a22ca760791b602082015230608052600080546001600160a01b03199081168417825560018054909116909517909455927fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a38051906001600160401b0382116200032b5760035490600182811c9216801562000463575b60208310146200044d5781601f849311620003d8575b50602090601f83116001146200034d5760009262000341575b50508160011b916000199060031b1c1916176003555b80516001600160401b0381116200032b576004918254600181811c9116801562000320575b60208210146200030b579081601f849311620002b3575b50602090601f831160011462000248576000926200023c575b50508160011b916000199060031b1c19161790555b1660018060a01b0319600a541617600a5560a0526001600955604051615a65908162000494823960805181615471015260a0518181816110f801526149b60152f35b015190503880620001e5565b6000858152602081209350601f198516905b8181106200029a575090846001959493921062000280575b505050811b019055620001fa565b015160001960f88460031b161c1916905538808062000272565b929360206001819287860151815501950193016200025a565b909150836000526020600020601f840160051c8101916020851062000300575b90601f859493920160051c01905b818110620002f05750620001cc565b60008155849350600101620002e1565b9091508190620002d3565b602284634e487b7160e01b6000525260246000fd5b90607f1690620001b5565b634e487b7160e01b600052604160045260246000fd5b0151905038806200017a565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9350601f198516905b818110620003bf5750908460019594939210620003a5575b505050811b0160035562000190565b015160001960f88460031b161c1916905538808062000396565b929360206001819287860151815501950193016200037e565b60036000529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c8101916020851062000442575b90601f859493920160051c01905b81811062000432575062000161565b6000815584935060010162000423565b909150819062000415565b634e487b7160e01b600052602260045260246000fd5b91607f16916200014b565b600080fd5b60408051919082016001600160401b038111838210176200032b5760405256fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714612abb5750806306fdde03146129f8578063081812fc146129da578063095ea7b3146128465780631400ecec146127a157806316844456146125265780631c1cdd4c146124c05780631e99d569146124a257806323b872dd1461247957806339a73c031461243657806340e58ee514612095578063425d30dd1461207757806342842e0e1461202757806342966c6814611ec95780634857501f14611e535780634869e12d14611e175780635fe3b56714611df05780636352211e14611dc15780636d0cee7514611d6957806370a0823114611cbf57806375829def14611c2d5780637cad6cd114611b5b5780637de6b1db146119325780638659c270146114da578063894e9a0d1461126d5780638bad38dd146111f15780638f69b9931461116e5780639067b6771461111b5780639188ec84146110e057806395d89b4114610fd2578063a22cb46514610f01578063a2ffb89714610e08578063a6202bf214610cff578063a80fc07114610caa578063ad35efd414610c47578063b256456914610c29578063b637b86514610bc9578063b88d4fde14610b3e578063b8a3be6614610b07578063b971302a14610ab5578063bc063e1a14610a92578063bc2be1be14610a3f578063c156a11d14610962578063c33cd35e1461084d578063c87b56dd1461071a578063cc364f481461067f578063d4dbd20b1461062a578063d511609f146105db578063d975dfed1461058e578063e985e9c514610537578063ea5ead19146104ef578063eac8f5b814610483578063f590c1761461045b578063f851a440146104345763fdd46d601461027c57600080fd5b3461042f57606036600319011261042f57600435610298612be8565b604435906001600160801b03821680830361042f576102b5615467565b6102be846134d4565b610417576102e284600052600b6020526001600160a01b0360406000205416331490565b1580610407575b6103e45761030d84600052600b6020526001600160a01b0360406000205416331490565b806103c0575b610393576001600160a01b0382161561036957156103515791610348602092600080516020615a458339815191529483615682565b604051908152a1005b6024836040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b6064846001600160a01b038460405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b508360005260056020526001600160a01b0380604060002054169083161415610313565b60405163216caf0d60e01b815260048101859052336024820152604490fd5b0390fd5b506104118461589c565b156102e9565b60248460405190634a5541ef60e01b82526004820152fd5b600080fd5b3461042f57600036600319011261042f5760206001600160a01b0360005416604051908152f35b3461042f57602036600319011261042f576020610479600435613524565b6040519015158152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160a01b0360016040600020015416604051908152f35b6024906040519062b8e7e760e51b82526004820152fd5b3461042f57604036600319011261042f57600080516020615a45833981519152602060043561034861051f612be8565b61052883615529565b90610531615467565b83615561565b3461042f57604036600319011261042f57610550612bd2565b610558612be8565b906001600160a01b03809116600052600860205260406000209116600052602052602060ff604060002054166040519015158152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576105ca602091615529565b6001600160801b0360405191168152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602060026040600020015460801c604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160801b0360036040600020015416604051908152f35b3461042f57602036600319011261042f57600435600060206040516106a381612d22565b828152015280600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052604080600020548151906106e082612d22565b64ffffffffff90818160a01c16835260c81c166020820152610718825180926020908164ffffffffff91828151168552015116910152565bf35b3461042f5760208060031936011261042f57600435906107586107538360005260056020526001600160a01b0360406000205416151590565b612dc1565b60006001600160a01b03600a5416926044604051809581937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa918215610841576000926107c8575b506107c4604051928284938452830190612bad565b0390f35b9091503d806000833e6107db8183612d6f565b810190828183031261042f5780519067ffffffffffffffff821161042f570181601f8201121561042f57805161081081612d91565b9261081e6040519485612d6f565b81845284828401011161042f5761083a91848085019101612b8a565b90826107af565b6040513d6000823e3d90fd5b3461042f5760031960203682011261042f576004359067ffffffffffffffff9081831161042f5761014090833603011261042f57610889615467565b6040519161089683612d05565b6108a281600401612bfe565b83526108b060248201613555565b60208401526108c160448201612cdc565b60408401526108d260648201612cdc565b60608401526108e360848201612bfe565b60808401526108f460a48201612dad565b60a084015261090560c48201612bfe565b60c08401526109173660e4830161363b565b60e084015261012481013591821161042f57013660238201121561042f5760209161094f61095a923690602460048201359101613567565b610100820152614907565b604051908152f35b3461042f57604036600319011261042f5760043561097e612be8565b610986615467565b81600052600b60205260ff60016040600020015460a81c1615610a28578160005260056020526001600160a01b0360406000205416803303610a09579161034881602093600080516020615a45833981519152956109e383615529565b6001600160801b0381166109f8575b50613054565b610a03908285615682565b876109f2565b60405163216caf0d60e01b815260048101849052336024820152604490fd5b6024826040519062b8e7e760e51b82526004820152fd5b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602064ffffffffff60406000205460a01c16604051908152f35b3461042f57600036600319011261042f57602060405167016345785d8a00008152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160a01b0360406000205416604051908152f35b3461042f57602036600319011261042f57600435600052600b602052602060ff60016040600020015460a81c166040519015158152f35b3461042f57608036600319011261042f57610b57612bd2565b610b5f612be8565b6064359167ffffffffffffffff831161042f573660238401121561042f57826004013591610b8c83612d91565b92610b9a6040519485612d6f565b808452366024828701011161042f576020816000926024610bc79801838801378501015260443591612edf565b005b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b6020526107c4610c1560046040600020016133bc565b604051918291602083526020830190612c78565b3461042f57602036600319011261042f57602061047960043561349d565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857610c819061480b565b6040516005821015610c94576020918152f35b634e487b7160e01b600052602160045260246000fd5b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160801b0360026040600020015416604051908152f35b3461042f57602036600319011261042f57610d18612bd2565b6001600160a01b038060005416338103610ddf57508116908160005260026020526001600160801b0360406000205416908115610dae5781610d809184600052600260205260406000206fffffffffffffffffffffffffffffffff19815416905533906154c3565b6040519081527fca7a4a65a94ed2f37538814e00e1cd4c41a78261561e3f3794592f11409cf5af60203392a3005b602483604051907f8410168c0000000000000000000000000000000000000000000000000000000082526004820152fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b3461042f57606036600319011261042f5767ffffffffffffffff60043581811161042f57610e3a903690600401612c47565b610e42612be8565b9260443590811161042f57610e5b903690600401612c47565b9190610e65615467565b828203610eca5760005b828110610e7857005b80600080516020615a458339815191526020610e97600194878a615551565b35610ebd610eae610ea9868b8a615551565b613627565b610eb6615467565b8b83615561565b604051908152a101610e6f565b50604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b3461042f57604036600319011261042f57610f1a612bd2565b6024359081151580920361042f576001600160a01b031690813314610f8e57336000526008602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b606460405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b3461042f57600036600319011261042f57604051600060045490600182811c918184169182156110d6575b60209485851084146110c05785879486865291826000146110a0575050600114611043575b5061102f92500383612d6f565b6107c4604051928284938452830190612bad565b84915060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b906000915b85831061108857505061102f935082010185611022565b80548389018501528794508693909201918101611071565b60ff19168582015261102f95151560051b85010192508791506110229050565b634e487b7160e01b600052602260045260246000fd5b92607f1692610ffd565b3461042f57600036600319011261042f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602064ffffffffff60406000205460c81c16604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576111a89061480b565b600581101580610c9457600282149081156111e4575b81156111d2575b6020826040519015158152f35b9050610c9457600460209114826111c5565b50506003811460006111be565b3461042f57602036600319011261042f576004356001600160a01b039081811680910361042f578160005416338103610ddf575060015491816001600160a01b03198416176001556040519216825260208201527fdcb09aef4bf01068924ccce937981cbe59d25ba08380cf941aaaea4e4bd3960d60403392a2005b3461042f57602036600319011261042f57606061014060405161128f81612d3e565b60008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201526112d361344a565b6101208201520152600435600052600b60205260ff60016040600020015460a81c16156114c257600435600052600b60205260406000206113b660046040519261131c84612d3e565b80546001600160a01b038116855264ffffffffff8160a01c16602086015264ffffffffff8160c81c16604086015260ff8160f01c161515606086015260f81c1515608085015260ff60018201546001600160a01b03811660a0870152818160a01c16151560c0870152818160a81c16151560e087015260b01c1615156101008501526113aa60028201613469565b610120850152016133bc565b6101408201526113c760043561480b565b906005821015610c9457600261014092146114b6575b6107c4604051928392602084526001600160a01b03815116602085015264ffffffffff602082015116604085015264ffffffffff60408201511660608501526060810151151560808501526080810151151560a08501526001600160a01b0360a08201511660c085015260c0810151151560e085015260e0810151151561010085015261010081015115156101208501526114a261012082015183860190604090816001600160801b0391828151168552826020820151166020860152015116910152565b01516101a0808401526101c0830190612c78565b600060608201526113dd565b602460405162b8e7e760e51b81526004356004820152fd5b3461042f5760208060031936011261042f5760043567ffffffffffffffff811161042f5761150c903690600401612c47565b90611515615467565b6000915b80831061152257005b61152d838284615551565b3592611537615467565b611540846134d4565b1561155d5760248460405190634a5541ef60e01b82526004820152fd5b61156984929394613524565b61191a5761158d82600052600b6020526001600160a01b0360406000205416331490565b15806118fa575b6118db576115a18261366a565b82600052600b928387526115bb6002604060002001613469565b936001600160801b03928386511684821610156118c3578260005281895260ff60406000205460f01c16156118ab579061160a82858b611600819796838c511661350b565b990151169061350b565b93826000528184526040600020966003885498600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1617815583881615611891575b0191811691826fffffffffffffffffffffffffffffffff1982541617905561169d6001600160a01b03809916926005875289604060002054169487528360019a8b60406000200154166154c3565b3382036117ae57823b61170a575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2600080516020615a458339815191529685925b604080516001600160801b03928316815292909116602083015290a4604051908152a1019190611519565b9350813b1561042f576040516372eba20360e01b8152600481018490526001600160a01b03821660248201526001600160801b03858116604483015286166064820152600080516020615a45833981519152958b9585927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2929190600081608481838b5af161179f575b5092509650506116ab565b6117a890612d5b565b8e611794565b813b6117ed575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2600080516020615a458339815191529685926116df565b9350803b1561042f576040516372eba20360e01b8152600481018490526001600160a01b03831660248201526001600160801b03858116604483015286166064820152600080516020615a45833981519152958b9585927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2929190600081608481838a5af1611882575b5092509650506117b5565b61188b90612d5b565b8e611877565b60018101600160a01b60ff60a01b1982541617905561164f565b602483604051906339c6dc7360e21b82526004820152fd5b602483604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b5081600052600585526001600160a01b0360406000205416331415611594565b6024826040519063fe19f19f60e01b82526004820152fd5b3461042f5760208060031936011261042f5760043561194f615467565b80600052600b825260ff60016040600020015460a81c16156104d8576119748161480b565b916000926005811015610c9457600481036119a15760248360405190634a5541ef60e01b82526004820152fd5b600381036119c1576024836040519063fe19f19f60e01b82526004820152fd5b916002849314611b43576119eb81600052600b6020526001600160a01b0360406000205416331490565b15611b235780600052600b825260ff60406000205460f01c1615611b0b5780600052600b8252604060002060ff60f01b198154169055600582526001600160a01b0360406000205416803b611a79575b50807f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f84600080516020615a4583398151915295a2604051908152a1005b803b1561042f57600080516020615a458339815191529360008084936024604051809481937f341a0bd90000000000000000000000000000000000000000000000000000000083528860048401525af1611ad6575b509350611a3b565b9050611ae29150612d5b565b8060007f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f611ace565b602490604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b602490604051906322cad1af60e11b82526004820152fd5b3461042f57602036600319011261042f576004356001600160a01b039081811680910361042f578160005416338103610ddf5750600a5491816001600160a01b0319841617600a556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26009546000198101908111611c175760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a1005b634e487b7160e01b600052601160045260246000fd5b3461042f57602036600319011261042f57611c46612bd2565b6000546001600160a01b0380821692338403611c98576001600160a01b03199350169182911617600055337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80600080a3005b6040516331b339a960e21b81526001600160a01b0385166004820152336024820152604490fd5b3461042f57602036600319011261042f576001600160a01b03611ce0612bd2565b168015611cff5760005260066020526020604060002054604051908152f35b608460405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b3461042f57602036600319011261042f57600435611da06107538260005260056020526001600160a01b0360406000205416151590565b600052600560205260206001600160a01b0360406000205416604051908152f35b3461042f57602036600319011261042f576020611ddf600435612e0c565b6001600160a01b0360405191168152f35b3461042f57600036600319011261042f5760206001600160a01b0360015416604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576105ca60209161488c565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576000611e8f8261480b565b6005811015610c9457600203611ead575b6020906040519015158152f35b50600052600b602052602060ff60406000205460f01c16611ea0565b3461042f57602036600319011261042f57600435611ee5615467565b611eee816134d4565b15611ff657611efc8161589c565b15611b2357611f0a81612e0c565b611f138261349d565b159081611fed575b81611fda575b50611fc257602081611f41600080516020615a4583398151915293612e0c565b9080600052600783526001600160a01b036040600020926001600160a01b031993848154169055169182600052600684526040600020600019815401905581600052600584526040600020908154169055806000604051937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a48152a1005b602490604051906378630aa960e01b82526004820152fd5b6001600160a01b03915016151582611f21565b60009150611f1b565b602490604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b3461042f5761203536612c12565b60405191602083019383851067ffffffffffffffff86111761206157610bc79460405260008452612edf565b634e487b7160e01b600052604160045260246000fd5b3461042f57602036600319011261042f5760206104796004356134d4565b3461042f5760208060031936011261042f57600435906120b3615467565b6120bc826134d4565b156120d95760248260405190634a5541ef60e01b82526004820152fd5b6120e282613524565b61191a5761210682600052600b6020526001600160a01b0360406000205416331490565b1580612416575b6118db5761211a8261366a565b9180600052600b82526121336002604060002001613469565b926001600160801b03908185511682821610156118c35782600052600b845260ff60406000205460f01c16156118ab5780828561217661218094838a511661350b565b970151169061350b565b9082600052600b84526040600020916003835493600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616178155838316156123fc575b0191861691826fffffffffffffffffffffffffffffffff198254161790556122146001600160a01b03809416926005875283856040600020541695600b8952600160406000200154166154c3565b33820361231c57823b61227b575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd28491600080516020615a45833981519152975b604080516001600160801b03928316815292909116602083015290a4604051908152a1005b823b1561042f576040516372eba20360e01b8152600481018590526001600160a01b03831660248201526001600160801b03878116604483015282166064820152600080516020615a458339815191529685927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd292909190600081608481838b5af161230d575b509750915050612222565b61231690612d5b565b89612302565b813b61235b575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd28491600080516020615a4583398151915297612256565b813b1561042f576040516372eba20360e01b8152600481018590526001600160a01b03841660248201526001600160801b03878116604483015282166064820152600080516020615a458339815191529685927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd292909190600081608481838a5af16123ed575b509750915050612323565b6123f690612d5b565b896123e2565b60018101600160a01b60ff60a01b198254161790556121c6565b5081600052600581526001600160a01b036040600020541633141561210d565b3461042f57602036600319011261042f576001600160a01b03612457612bd2565b16600052600260205260206001600160801b0360406000205416604051908152f35b3461042f57610bc761248a36612c12565b9161249d6124988433612f75565b612e6e565b613054565b3461042f57600036600319011261042f576020600954604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576124fa9061480b565b6005811015610c9457806020911590811561251b575b506040519015158152f35b600191501482612510565b3461042f576020600319818136011261042f576004359067ffffffffffffffff9081831161042f576101208336039182011261042f57612564615467565b610104830135906022190181121561042f57820160048101359082821161042f57602401606082023603811361042f5761259f913691613567565b918251906125ac826133a4565b916125ba6040519384612d6f565b808352601f196125c9826133a4565b018660005b82811061278b5750505064ffffffffff90814216946001600160801b0396876125f6826136d5565b515116828a612604846136d5565b5101511685806040612615866136d5565b510151168a0116906040519261262a84612ce9565b83528b830152604082015261263e876136d5565b52612648866136d5565b5060019386855b8a8c87831061270a57908b846001600160a01b038c60a48101358281169081900361042f5761095a956126ca956126fa9461268c60248601613606565b61269860448701613606565b6126a460648801613613565b916126b188600401613613565b94846126bf60848b01613627565b966040519d8e612d05565b168c528d8c0152151560408b0152151560608a01521660808801521660a086015260c085015260c436910161363b565b60e0830152610100820152614907565b88938580604061273e8b8661272e8a8e9a612725828d6136f8565b5151169a6136f8565b51015116946000198901906136f8565b5101511681604061274f888c6136f8565b510151160116916040519361276385612ce9565b84528301526040820152612777828b6136f8565b52612782818a6136f8565b5001879061264f565b61279361344a565b8282880101520187906125ce565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d85760209060009080600052600b8352604060002060ff815460f01c1680612834575b61280b575b50506001600160801b0360405191168152f35b61282d92506001600160801b036002612827920154169161366a565b9061350b565b82806127f8565b5060ff600182015460a01c16156127f3565b3461042f57604036600319011261042f5761285f612bd2565b602435906001600160a01b03808061287685612e0c565b169216918083146129705780331490811561294b575b50156128e1578260005260076020526040600020826001600160a01b03198254161790556128b983612e0c565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b608460405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600860205260406000203360005260205260ff604060002054168461288c565b608460405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b3461042f57602036600319011261042f576020611ddf600435612e31565b3461042f57600036600319011261042f57604051600060035490600182811c91818416918215612ab1575b60209485851084146110c05785879486865291826000146110a0575050600114612a54575061102f92500383612d6f565b84915060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906000915b858310612a9957505061102f935082010185611022565b80548389018501528794508693909201918101612a82565b92607f1692612a23565b3461042f57602036600319011261042f57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361042f57817f80ac58cd0000000000000000000000000000000000000000000000000000000060209314908115612b60575b8115612b36575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612b2f565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612b28565b60005b838110612b9d5750506000910152565b8181015183820152602001612b8d565b90602091612bc681518092818552858086019101612b8a565b601f01601f1916010190565b600435906001600160a01b038216820361042f57565b602435906001600160a01b038216820361042f57565b35906001600160a01b038216820361042f57565b606090600319011261042f576001600160a01b0390600435828116810361042f5791602435908116810361042f579060443590565b9181601f8401121561042f5782359167ffffffffffffffff831161042f576020808501948460051b01011161042f57565b90815180825260208080930193019160005b828110612c98575050505090565b835180516001600160801b031686528083015167ffffffffffffffff168684015260409081015164ffffffffff169086015260609094019392810192600101612c8a565b3590811515820361042f57565b6060810190811067ffffffffffffffff82111761206157604052565b610120810190811067ffffffffffffffff82111761206157604052565b6040810190811067ffffffffffffffff82111761206157604052565b610160810190811067ffffffffffffffff82111761206157604052565b67ffffffffffffffff811161206157604052565b90601f8019910116810190811067ffffffffffffffff82111761206157604052565b67ffffffffffffffff811161206157601f01601f191660200190565b35906001600160801b038216820361042f57565b15612dc857565b606460405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b60005260056020526001600160a01b0360406000205416612e2e811515612dc1565b90565b612e546107538260005260056020526001600160a01b0360406000205416151590565b60005260076020526001600160a01b036040600020541690565b15612e7557565b608460405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b90612f03939291612ef36124988433612f75565b612efe838383613054565b613209565b15612f0a57565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b906001600160a01b038080612f8984612e0c565b16931691838314938415612fbc575b508315612fa6575b50505090565b612fb291929350612e31565b1614388080612fa0565b909350600052600860205260406000208260005260205260ff604060002054169238612f98565b15612fea57565b608460405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b9061307d929161306383612e0c565b916001600160a01b03948593848094169687911614612fe3565b169081156131705761308e8361349d565b1580613168575b8061315f575b61314757918084926130c9600080516020615a45833981519152966020966130c285612e0c565b1614612fe3565b60009382855260078652604085206001600160a01b031990818154169055818652600687526040862060001981540190558286526040862060018154019055838652600587528260408720918254161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519580a48152a1565b602483604051906378630aa960e01b82526004820152fd5b5083151561309b565b506001613095565b608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d15613204573d906131ea82612d91565b916131f86040519384612d6f565b82523d6000602084013e565b606090565b91926000929190813b1561339a5760209161327991856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c84523360048501526001600160a01b0380951660248501526044840152608060648401526084830190612bad565b0393165af190829082613333575b505061330d576132956131d9565b805190816133085760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d8211613392575b8161334f60209383612d6f565b8101031261338e5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361338b5750903880613287565b80fd5b5080fd5b3d9150613342565b5050505050600190565b67ffffffffffffffff81116120615760051b60200190565b9081546133c8816133a4565b926040936133d885519182612d6f565b828152809460208092019260005281600020906000935b8585106133fe57505050505050565b6001848192845161340e81612ce9565b64ffffffffff87546001600160801b038116835267ffffffffffffffff8160801c168584015260c01c16868201528152019301940193916133ef565b6040519061345782612ce9565b60006040838281528260208201520152565b9060405161347681612ce9565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260ff60016040600020015460b01c1690565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260ff60016040600020015460a01c1690565b6001600160801b039182169082160391908211611c1757565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260406000205460f81c90565b359064ffffffffff8216820361042f57565b929192613573826133a4565b60409461358286519283612d6f565b8195848352602080930191606080960285019481861161042f57925b8584106135ae5750505050505050565b868483031261042f578251906135c382612ce9565b6135cc85612dad565b8252858501359067ffffffffffffffff8216820361042f57828792838b9501526135f7868801613555565b8682015281520193019261359e565b35801515810361042f5790565b356001600160a01b038116810361042f5790565b356001600160801b038116810361042f5790565b919082604091031261042f5760405161365381612d22565b602080829461366181612bfe565b84520135910152565b64ffffffffff80421682600052600b602052604060002091825482828260a01c1610156136cb5760c81c1611156136b95760040154600110156136b057612e2e9061370c565b612e2e9061473c565b6001600160801b039150600201541690565b5050505050600090565b8051156136e25760200190565b634e487b7160e01b600052603260045260246000fd5b80518210156136e25760209160051b010190565b64ffffffffff90814216906000908152600b60205260409081812082519361373385612d3e565b8154956001600160a01b039182881687526020870197828160a01c168952828160c81c168789015260ff8160f01c161515606089015260f81c1515608088015260ff6001938486015490811660a08a0152818160a01c16151560c08a0152818160a81c16151560e08a015260b01c1615156101008801526101406137cd60046137be60028801613469565b966101208b01978852016133bc565b97019187835280876137df889a6136d5565b5101511693828288965b16106138c35750916138736138789284888161387d98976001600160801b039e8f6138158b8a516136f8565b5151169d8a8f9b602061383267ffffffffffffffff928d516136f8565b510151169984836138448484516136f8565b51015116965081156138b757613862929350519060001901906136f8565b5101511680925b0316920316613937565b613ca6565b613b09565b92831361389657505061389083916138fb565b16011690565b5160200151929392831692841683101591506138b29050575090565b905090565b50505051168092613869565b8094986001600160801b0390816138db8c88516136f8565b51511601169801938282808a6138f28989516136f8565b510151166137e9565b600081126139065790565b602490604051907f2463f3d50000000000000000000000000000000000000000000000000000000082526004820152fd5b90600160ff1b808314908115613a1f575b506139f55760008212156139ec57613971826000035b60008312156139e5578260000390613a29565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116139af57600091600019911813156139ab575090565b0390565b604491604051917fd49c26b300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290613a29565b6139718261395e565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b9050811438613948565b670de0b6b3a7640000916000198383099280830292838086109503948086039514613ae55782851015613aa957908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b505080925015613af3570490565b634e487b7160e01b600052601260045260246000fd5b90600160ff1b808314908115613bed575b50613bc3576000821215613bba57613b43826000035b6000831215613bb3578260000390613bf7565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311613b7d57600091600019911813156139ab575090565b604491604051917f120b5b4300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290613bf7565b613b4382613b30565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b9050811438613b1a565b90919060001983820983820291828083109203918083039214613c9557670de0b6b3a76400009081831015613c5e57947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b80613cc05750600090612e2e5750670de0b6b3a764000090565b90670de0b6b3a7640000808314613d0d575080613ce5575050670de0b6b3a764000090565b670de0b6b3a76400008114613d0957613d0490613878612e2e936145e7565b613d2d565b5090565b91505090565b8015613af3576ec097ce7bc90715b34b9f10000000000590565b6000811215613d625768033dd1780914b97114198112613d5c57613d5390600003613d2d565b612e2e90613d13565b50600090565b680a688906bd8affffff81136145b657670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff000000000000008316614499575b66ff0000000000008316614391575b65ff00000000008316614291575b64ff000000008316614199575b63ff00000083166140a9575b62ff00008316613fc1575b61ff008316613ee1575b60ff8316613e0a575b02911c60bf031c90565b60808316613ecf575b838316613ebd575b60208316613eab575b60108316613e99575b60088316613e87575b60048316613e75575b60028316613e63575b6001831615613e00576801000000000000000102831c613e00565b6801000000000000000102831c613e48565b6801000000000000000302831c613e3f565b6801000000000000000602831c613e36565b6801000000000000000b02831c613e2d565b6801000000000000001602831c613e24565b6801000000000000002c02831c613e1b565b6801000000000000005902831c613e13565b6180008316613faf575b6140008316613f9d575b6120008316613f8b575b6110008316613f79575b6108008316613f67575b6104008316613f55575b6102008316613f43575b610100831615613df757680100000000000000b102831c613df7565b6801000000000000016302831c613f27565b680100000000000002c602831c613f1d565b6801000000000000058c02831c613f13565b68010000000000000b1702831c613f09565b6801000000000000162e02831c613eff565b68010000000000002c5d02831c613ef5565b680100000000000058b902831c613eeb565b628000008316614097575b624000008316614085575b622000008316614073575b621000008316614061575b62080000831661404f575b62040000831661403d575b62020000831661402b575b62010000831615613ded576801000000000000b17202831c613ded565b680100000000000162e402831c61400e565b6801000000000002c5c802831c614003565b68010000000000058b9102831c613ff8565b680100000000000b172102831c613fed565b68010000000000162e4302831c613fe2565b680100000000002c5c8602831c613fd7565b6801000000000058b90c02831c613fcc565b63800000008316614187575b63400000008316614175575b63200000008316614163575b63100000008316614151575b6308000000831661413f575b6304000000831661412d575b6302000000831661411b575b6301000000831615613de25768010000000000b1721802831c613de2565b6801000000000162e43002831c6140fd565b68010000000002c5c86002831c6140f1565b680100000000058b90c002831c6140e5565b6801000000000b17217f02831c6140d9565b680100000000162e42ff02831c6140cd565b6801000000002c5c85fe02831c6140c1565b68010000000058b90bfc02831c6140b5565b648000000000831661427f575b644000000000831661426d575b642000000000831661425b575b6410000000008316614249575b6408000000008316614237575b6404000000008316614225575b6402000000008316614213575b640100000000831615613dd657680100000000b17217f802831c613dd6565b68010000000162e42ff102831c6141f4565b680100000002c5c85fe302831c6141e7565b6801000000058b90bfce02831c6141da565b68010000000b17217fbb02831c6141cd565b6801000000162e42fff002831c6141c0565b68010000002c5c8601cc02831c6141b3565b680100000058b90c0b4902831c6141a6565b65800000000000831661437f575b65400000000000831661436d575b65200000000000831661435b575b651000000000008316614349575b650800000000008316614337575b650400000000008316614325575b650200000000008316614313575b65010000000000831615613dc9576801000000b17218355102831c613dc9565b680100000162e430e5a202831c6142f3565b6801000002c5c863b73f02831c6142e5565b68010000058b90cf1e6e02831c6142d7565b680100000b1721bcfc9a02831c6142c9565b68010000162e43f4f83102831c6142bb565b680100002c5c89d5ec6d02831c6142ad565b6801000058b91b5bc9ae02831c61429f565b66800000000000008316614487575b66400000000000008316614475575b66200000000000008316614463575b66100000000000008316614451575b6608000000000000831661443f575b6604000000000000831661442d575b6602000000000000831661441b575b6601000000000000831615613dbb5768010000b17255775c0402831c613dbb565b6801000162e525ee054702831c6143fa565b68010002c5cc37da949202831c6143eb565b680100058ba01fb9f96d02831c6143dc565b6801000b175effdc76ba02831c6143cd565b680100162f3904051fa102831c6143be565b6801002c605e2e8cec5002831c6143af565b68010058c86da1c09ea202831c6143a0565b6780000000000000008316614597575b6740000000000000008316614585575b6720000000000000008316614573575b6710000000000000008316614561575b670800000000000000831661454f575b670400000000000000831661453d575b670200000000000000831661452b575b670100000000000000831615613dac57680100b1afa5abcbed6102831c613dac565b68010163da9fb33356d802831c614509565b680102c9a3e778060ee702831c6144f9565b6801059b0d31585743ae02831c6144e9565b68010b5586cf9890f62a02831c6144d9565b6801172b83c7d517adce02831c6144c9565b6801306fe0a31b7152df02831c6144b9565b5077b504f333f9de6484800000000000000000000000000000006144a9565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b8060008083131561470b57670de0b6b3a7640000928381126146d457506001925b808305906001600160801b03821160071b91821c9167ffffffffffffffff831160061b92831c63ffffffff811160051b90811c61ffff811160041b90811c60ff811160031b90811c91600f831160021b92831c936001978860038711811b96871c11961717171717171781810294811d908282146146c857506706f05b59d3b20000905b84821361469c5750505050500290565b808391020590671bc16d674ec800008212156146bb575b831d9061468c565b8091950194831d906146b3565b93505093925050020290565b60001993925080156146f7576ec097ce7bc90715b34b9f10000000000591614608565b602482634e487b7160e01b81526012600452fd5b602483604051907f059b101b0000000000000000000000000000000000000000000000000000000082526004820152fd5b6000818152600b602052614771604082205464ffffffffff808281809460a01c1693849160c81c160316918142160316613937565b91808252600b602052600460408320018054156147f75790829167ffffffffffffffff93526147c96020832054828452600b6020526138786001600160801b03968760026040882001541696879360801c1690613ca6565b9283136147df5750506147db906138fb565b1690565b60029350604092508152600b60205220015460801c90565b602483634e487b7160e01b81526032600452fd5b80600052600b602052604060002060ff600182015460a01c16600014614832575050600490565b805460f81c614885575460a01c64ffffffffff164210613d5c576148558161366a565b90600052600b6020526001600160801b03806002604060002001541691161060001461488057600190565b600290565b5050600390565b80600052600b6020526148a56002604060002001613469565b81600052600b602052604060002060ff600182015460a01c166000146148d857506001600160801b039150602001511690565b5460f81c6148ea5750612e2e9061366a565b612e2e91506001600160801b03604081835116920151169061350b565b906001600160a01b036001541660206001600160a01b0360c0850151166024604051809481937fdcf844a700000000000000000000000000000000000000000000000000000000835260048301525afa8015610841576000906151d6575b61498891506001600160801b0360a08501511690602060e0860151015191615905565b6001600160801b038151166101008401519064ffffffffff60208601511681156151ac5782518015615182577f00000000000000000000000000000000000000000000000000000000000000008111615151575064ffffffffff60406149ed856136d5565b510151168110156150fa5750600091829083815185905b808210615067575050505064ffffffffff421664ffffffffff82168110156150275750506001600160801b0382168103614fe55750506009549283600052600b6020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b0360c083015116600184015490750100000000000000000000000000000000000000000060408501511515928654927fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff000000000000000000000000000000000000000000006060890151151560b01b16921617171760018601556001600160a01b0384511691610100850151926040614b1f8551956000198701906136f8565b510151927fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff0000000000000000000000000000000000000000000000000078ffffffffff000000000000000000000000000000000000000060208b015160a01b169660c81b169460f01b16911617171717845560005b818110614f15575050600185016009556001600160a01b0360c08301511660005260026020526001600160801b0380604060002054168160208401511601166001600160a01b0360c0840151166000526040600020906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036080830151168015614ed157614c66614c608760005260056020526001600160a01b0360406000205416151590565b15615384565b614c6f8661349d565b1580614ec9575b80614ec1575b614ea9576020600080516020615a4583398151915291614cb5614c608960005260056020526001600160a01b0360406000205416151590565b806000526006825260406000206001815401905587600052600582526040600020816001600160a01b0319825416179055876040519160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4878152a1614d456001600160a01b0360c0840151166001600160801b0380845116816020860151160116903090339061520a565b6001600160801b0360408201511680614e7a575b507fef3d668acee46576ad5d407c42ab4d0cde13f3cd70b28f09a0fb9e3bf5bf09cb6001600160a01b0383511691866001600160a01b03608086015116946001600160a01b0360c08201511696614e6f614e4f6040840151151592606085015115156001600160a01b0360e061010088015193549764ffffffffff60405199614de18b612d22565b818160a01c168b5260c81c1660208a01520151511694614e34604051998a998a523360208b015260408a0190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60a088015260c08701526101608060e0880152860190612c78565b926101008501906020908164ffffffffff91828151168552015116910152565b6101408301520390a4565b614ea3906001600160a01b0360c0850151166001600160a01b0360e0860151511690339061520a565b38614d59565b602486604051906378630aa960e01b82526004820152fd5b506000614c7c565b506001614c76565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b614f24816101008601516136f8565b51906004860154916801000000000000000083101561206157600183018060048901558310156136e25760019260048801600052602060002001906001600160801b03815116908254917fffffff00000000000000000000000000000000000000000000000000000000007cffffffffff000000000000000000000000000000000000000000000000604077ffffffffffffffff00000000000000000000000000000000602086015160801b1694015160c01b169316171717905501614bbb565b6040517fd90b7e390000000000000000000000000000000000000000000000000000000081526001600160801b03918216600482015291166024820152604490fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b919350919461508b906001600160801b0361508285896136f8565b51511690615667565b9464ffffffffff80604061509f86856136f8565b510151169416808511156150bd575060018493019192919092614a04565b8385606492604051927f7b0bada8000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff604061510b856136d5565b5101516040517fb4c9e52c00000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f4757689b0000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3952c64e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b6020823d602011615202575b816151ef60209383612d6f565b8101031261338b57506149889051614965565b3d91506151e2565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff841117612061576152799260405261527b565b565b6001600160a01b0316906152db60405161529481612d22565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16152d56131d9565b916153cf565b805191821591848315615360575b5050509050156152f65750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b91938180945001031261338e5782015190811515820361338b5750803880846152e9565b1561538b57565b606460405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b9192901561543057508151156153e3575090565b3b156153ec5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156154435750805190602001fd5b6104039060405191829162461bcd60e51b8352602060048401526024830190612bad565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361549957565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000006020850152166024830152604482015260448152608081019181831067ffffffffffffffff841117612061576152799260405261527b565b612e2e906155368161488c565b90600052600b60205260026040600020015460801c9061350b565b91908110156136e25760051b0190565b92919061556d846134d4565b6104175761559184600052600b6020526001600160a01b0360406000205416331490565b1580615657575b6103e4576155bc84600052600b6020526001600160a01b0360406000205416331490565b80615633575b615606576001600160a01b03811615610369576001600160801b038216156155ee576152799293615682565b6024846040519063d2aabcd960e01b82526004820152fd5b836001600160a01b0360649260405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b508360005260056020526001600160a01b03806040600020541690821614156155c2565b506156618461589c565b15615598565b9190916001600160801b0380809416911601918211611c1757565b929190926001600160801b038061569883615529565b16928181169380851161585f5750600095838752602092600b84526156fd6156cb6040946002868c20015460801c615667565b868a52600b86526002858b200190836fffffffffffffffffffffffffffffffff1983549260801b169116178155613469565b9061571881868401511692828681835116920151169061350b565b161115615830575b838752600b83526001600160a01b03916157438683856001858d200154166154c3565b848852600584528281892054168033141580615826575b61578f575b507ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9495969750519586521693a3565b803b156158225797807ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9697989960848451809481937f13375c3b0000000000000000000000000000000000000000000000000000000083528c600484015233602484015289891660448401528d60648401525af1615813575b889796955061575f565b61581c90612d5b565b38615809565b8880fd5b50803b151561575a565b838752600b835281872060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055615720565b8360649186604051927fa1fb2bbc000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60009080825260056020526001600160a01b0380604084205416928333149384156158e1575b505082156158cf57505090565b9091506158dc3392612e31565b161490565b60ff92945090604091815260086020528181203382526020522054169138806158c2565b90929161591061344a565b936001600160801b0392838116918215615a1c5767016345785d8a00008082116159e5578085116159ae575061595a8561594b819386613bf7565b16946020890195865284613bf7565b169184615971604089019480865282875116615667565b1610156159985761598a8491826159939551169061350b565b9151169061350b565b168252565b634e487b7160e01b600052600160045260246000fd5b84604491604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60449250604051917f47152d6700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50505050509050604051615a2f81612ce9565b6000815260006020820152600060408201529056fef8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7"; + hex"60c0346200046e57601f62005efc38819003918201601f19168301916001600160401b038311848410176200032b578084926080946040528339810103126200046e5780516001600160a01b038082169290918390036200046e5760208101518281168091036200046e5760408201519183831683036200046e5760600151936200008962000473565b90601d82527f5361626c696572205632204c6f636b75702044796e616d6963204e46540000006020830152620000be62000473565b601181527029a0a116ab1916a627a1a5aaa816a22ca760791b602082015230608052600080546001600160a01b03199081168417825560018054909116909517909455927fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a38051906001600160401b0382116200032b5760035490600182811c9216801562000463575b60208310146200044d5781601f849311620003d8575b50602090601f83116001146200034d5760009262000341575b50508160011b916000199060031b1c1916176003555b80516001600160401b0381116200032b576004918254600181811c9116801562000320575b60208210146200030b579081601f849311620002b3575b50602090601f831160011462000248576000926200023c575b50508160011b916000199060031b1c19161790555b1660018060a01b0319600a541617600a5560a0526001600955604051615a68908162000494823960805181615474015260a0518181816110f701526149b70152f35b015190503880620001e5565b6000858152602081209350601f198516905b8181106200029a575090846001959493921062000280575b505050811b019055620001fa565b015160001960f88460031b161c1916905538808062000272565b929360206001819287860151815501950193016200025a565b909150836000526020600020601f840160051c8101916020851062000300575b90601f859493920160051c01905b818110620002f05750620001cc565b60008155849350600101620002e1565b9091508190620002d3565b602284634e487b7160e01b6000525260246000fd5b90607f1690620001b5565b634e487b7160e01b600052604160045260246000fd5b0151905038806200017a565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9350601f198516905b818110620003bf5750908460019594939210620003a5575b505050811b0160035562000190565b015160001960f88460031b161c1916905538808062000396565b929360206001819287860151815501950193016200037e565b60036000529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c8101916020851062000442575b90601f859493920160051c01905b81811062000432575062000161565b6000815584935060010162000423565b909150819062000415565b634e487b7160e01b600052602260045260246000fd5b91607f16916200014b565b600080fd5b60408051919082016001600160401b038111838210176200032b5760405256fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714612aba5750806306fdde03146129f7578063081812fc146129d9578063095ea7b3146128455780631400ecec146127a057806316844456146125255780631c1cdd4c146124bf5780631e99d569146124a157806323b872dd1461247857806339a73c031461243557806340e58ee514612094578063425d30dd1461207657806342842e0e1461202657806342966c6814611ec85780634857501f14611e525780634869e12d14611e165780635fe3b56714611def5780636352211e14611dc05780636d0cee7514611d6857806370a0823114611cbe57806375829def14611c2c5780637cad6cd114611b5a5780637de6b1db146119315780638659c270146114d9578063894e9a0d1461126c5780638bad38dd146111f05780638f69b9931461116d5780639067b6771461111a5780639188ec84146110df57806395d89b4114610fd1578063a22cb46514610f00578063a2ffb89714610e07578063a6202bf214610cfe578063a80fc07114610ca9578063ad35efd414610c46578063b256456914610c28578063b637b86514610bc8578063b88d4fde14610b3d578063b8a3be6614610b06578063b971302a14610ab4578063bc063e1a14610a91578063bc2be1be14610a3e578063c156a11d14610961578063c33cd35e1461084c578063c87b56dd14610719578063cc364f481461067f578063d4dbd20b1461062a578063d511609f146105db578063d975dfed1461058e578063e985e9c514610537578063ea5ead19146104ef578063eac8f5b814610483578063f590c1761461045b578063f851a440146104345763fdd46d601461027c57600080fd5b3461042f57606036600319011261042f57600435610298612be7565b604435906001600160801b03821680830361042f576102b561546a565b6102be846134d5565b610417576102e284600052600b6020526001600160a01b0360406000205416331490565b1580610407575b6103e45761030d84600052600b6020526001600160a01b0360406000205416331490565b806103c0575b610393576001600160a01b0382161561036957156103515791610348602092600080516020615a488339815191529483615685565b604051908152a1005b6024836040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b6064846001600160a01b038460405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b508360005260056020526001600160a01b0380604060002054169083161415610313565b60405163216caf0d60e01b815260048101859052336024820152604490fd5b0390fd5b506104118461589f565b156102e9565b60248460405190634a5541ef60e01b82526004820152fd5b600080fd5b3461042f57600036600319011261042f5760206001600160a01b0360005416604051908152f35b3461042f57602036600319011261042f576020610479600435613525565b6040519015158152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160a01b0360016040600020015416604051908152f35b6024906040519062b8e7e760e51b82526004820152fd5b3461042f57604036600319011261042f57600080516020615a48833981519152602060043561034861051f612be7565b6105288361552c565b9061053161546a565b83615564565b3461042f57604036600319011261042f57610550612bd1565b610558612be7565b906001600160a01b03809116600052600860205260406000209116600052602052602060ff604060002054166040519015158152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576105ca60209161552c565b6001600160801b0360405191168152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602060026040600020015460801c604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160801b0360036040600020015416604051908152f35b3461042f57602036600319011261042f57600435600060206040516106a381612d21565b828152015280600052600b60205260ff60016040600020015460a81c16156104d857600052600b6020526040806000205464ffffffffff8251916106e683612d21565b818160a01c16835260c81c166020820152610717825180926020908164ffffffffff91828151168552015116910152565bf35b3461042f5760208060031936011261042f57600435906107576107528360005260056020526001600160a01b0360406000205416151590565b612dc0565b60006001600160a01b03600a5416926044604051809581937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa918215610840576000926107c7575b506107c3604051928284938452830190612bac565b0390f35b9091503d806000833e6107da8183612d6e565b810190828183031261042f5780519067ffffffffffffffff821161042f570181601f8201121561042f57805161080f81612d90565b9261081d6040519485612d6e565b81845284828401011161042f5761083991848085019101612b89565b90826107ae565b6040513d6000823e3d90fd5b3461042f5760031960203682011261042f576004359067ffffffffffffffff9081831161042f5761014090833603011261042f5761088861546a565b6040519161089583612d04565b6108a181600401612bfd565b83526108af60248201613556565b60208401526108c060448201612cdb565b60408401526108d160648201612cdb565b60608401526108e260848201612bfd565b60808401526108f360a48201612dac565b60a084015261090460c48201612bfd565b60c08401526109163660e4830161363c565b60e084015261012481013591821161042f57013660238201121561042f5760209161094e610959923690602460048201359101613568565b610100820152614908565b604051908152f35b3461042f57604036600319011261042f5760043561097d612be7565b61098561546a565b81600052600b60205260ff60016040600020015460a81c1615610a27578160005260056020526001600160a01b0360406000205416803303610a08579161034881602093600080516020615a48833981519152956109e28361552c565b6001600160801b0381166109f7575b50613053565b610a02908285615685565b876109f1565b60405163216caf0d60e01b815260048101849052336024820152604490fd5b6024826040519062b8e7e760e51b82526004820152fd5b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602064ffffffffff60406000205460a01c16604051908152f35b3461042f57600036600319011261042f57602060405167016345785d8a00008152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160a01b0360406000205416604051908152f35b3461042f57602036600319011261042f57600435600052600b602052602060ff60016040600020015460a81c166040519015158152f35b3461042f57608036600319011261042f57610b56612bd1565b610b5e612be7565b6064359167ffffffffffffffff831161042f573660238401121561042f57826004013591610b8b83612d90565b92610b996040519485612d6e565b808452366024828701011161042f576020816000926024610bc69801838801378501015260443591612ede565b005b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b6020526107c3610c1460046040600020016133bd565b604051918291602083526020830190612c77565b3461042f57602036600319011261042f57602061047960043561349e565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857610c809061480c565b6040516005821015610c93576020918152f35b634e487b7160e01b600052602160045260246000fd5b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260206001600160801b0360026040600020015416604051908152f35b3461042f57602036600319011261042f57610d17612bd1565b6001600160a01b038060005416338103610dde57508116908160005260026020526001600160801b0360406000205416908115610dad5781610d7f9184600052600260205260406000206fffffffffffffffffffffffffffffffff19815416905533906154c6565b6040519081527fca7a4a65a94ed2f37538814e00e1cd4c41a78261561e3f3794592f11409cf5af60203392a3005b602483604051907f8410168c0000000000000000000000000000000000000000000000000000000082526004820152fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b3461042f57606036600319011261042f5767ffffffffffffffff60043581811161042f57610e39903690600401612c46565b610e41612be7565b9260443590811161042f57610e5a903690600401612c46565b9190610e6461546a565b828203610ec95760005b828110610e7757005b80600080516020615a488339815191526020610e96600194878a615554565b35610ebc610ead610ea8868b8a615554565b613628565b610eb561546a565b8b83615564565b604051908152a101610e6e565b50604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b3461042f57604036600319011261042f57610f19612bd1565b6024359081151580920361042f576001600160a01b031690813314610f8d57336000526008602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b606460405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b3461042f57600036600319011261042f57604051600060045490600182811c918184169182156110d5575b60209485851084146110bf57858794868652918260001461109f575050600114611042575b5061102e92500383612d6e565b6107c3604051928284938452830190612bac565b84915060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b906000915b85831061108757505061102e935082010185611021565b80548389018501528794508693909201918101611070565b60ff19168582015261102e95151560051b85010192508791506110219050565b634e487b7160e01b600052602260045260246000fd5b92607f1692610ffc565b3461042f57600036600319011261042f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d857600052600b602052602064ffffffffff60406000205460c81c16604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576111a79061480c565b600581101580610c9357600282149081156111e3575b81156111d1575b6020826040519015158152f35b9050610c9357600460209114826111c4565b50506003811460006111bd565b3461042f57602036600319011261042f576004356001600160a01b039081811680910361042f578160005416338103610dde575060015491816001600160a01b03198416176001556040519216825260208201527fdcb09aef4bf01068924ccce937981cbe59d25ba08380cf941aaaea4e4bd3960d60403392a2005b3461042f57602036600319011261042f57606061014060405161128e81612d3d565b60008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201526112d261344b565b6101208201520152600435600052600b60205260ff60016040600020015460a81c16156114c157600435600052600b60205260406000206113b560046040519261131b84612d3d565b80546001600160a01b038116855264ffffffffff8160a01c16602086015264ffffffffff8160c81c16604086015260ff8160f01c161515606086015260f81c1515608085015260ff60018201546001600160a01b03811660a0870152818160a01c16151560c0870152818160a81c16151560e087015260b01c1615156101008501526113a96002820161346a565b610120850152016133bd565b6101408201526113c660043561480c565b906005821015610c9357600261014092146114b5575b6107c3604051928392602084526001600160a01b03815116602085015264ffffffffff602082015116604085015264ffffffffff60408201511660608501526060810151151560808501526080810151151560a08501526001600160a01b0360a08201511660c085015260c0810151151560e085015260e0810151151561010085015261010081015115156101208501526114a161012082015183860190604090816001600160801b0391828151168552826020820151166020860152015116910152565b01516101a0808401526101c0830190612c77565b600060608201526113dc565b602460405162b8e7e760e51b81526004356004820152fd5b3461042f5760208060031936011261042f5760043567ffffffffffffffff811161042f5761150b903690600401612c46565b9061151461546a565b6000915b80831061152157005b61152c838284615554565b359261153661546a565b61153f846134d5565b1561155c5760248460405190634a5541ef60e01b82526004820152fd5b61156884929394613525565b6119195761158c82600052600b6020526001600160a01b0360406000205416331490565b15806118f9575b6118da576115a08261366b565b82600052600b928387526115ba600260406000200161346a565b936001600160801b03928386511684821610156118c2578260005281895260ff60406000205460f01c16156118aa579061160982858b6115ff819796838c511661350c565b990151169061350c565b93826000528184526040600020966003885498600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1617815583881615611890575b0191811691826fffffffffffffffffffffffffffffffff1982541617905561169c6001600160a01b03809916926005875289604060002054169487528360019a8b60406000200154166154c6565b3382036117ad57823b611709575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2600080516020615a488339815191529685925b604080516001600160801b03928316815292909116602083015290a4604051908152a1019190611518565b9350813b1561042f576040516372eba20360e01b8152600481018490526001600160a01b03821660248201526001600160801b03858116604483015286166064820152600080516020615a48833981519152958b9585927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2929190600081608481838b5af161179e575b5092509650506116aa565b6117a790612d5a565b8e611793565b813b6117ec575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2600080516020615a488339815191529685926116de565b9350803b1561042f576040516372eba20360e01b8152600481018490526001600160a01b03831660248201526001600160801b03858116604483015286166064820152600080516020615a48833981519152958b9585927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2929190600081608481838a5af1611881575b5092509650506117b4565b61188a90612d5a565b8e611876565b60018101600160a01b60ff60a01b1982541617905561164e565b602483604051906339c6dc7360e21b82526004820152fd5b602483604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b5081600052600585526001600160a01b0360406000205416331415611593565b6024826040519063fe19f19f60e01b82526004820152fd5b3461042f5760208060031936011261042f5760043561194e61546a565b80600052600b825260ff60016040600020015460a81c16156104d8576119738161480c565b916000926005811015610c9357600481036119a05760248360405190634a5541ef60e01b82526004820152fd5b600381036119c0576024836040519063fe19f19f60e01b82526004820152fd5b916002849314611b42576119ea81600052600b6020526001600160a01b0360406000205416331490565b15611b225780600052600b825260ff60406000205460f01c1615611b0a5780600052600b8252604060002060ff60f01b198154169055600582526001600160a01b0360406000205416803b611a78575b50807f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f84600080516020615a4883398151915295a2604051908152a1005b803b1561042f57600080516020615a488339815191529360008084936024604051809481937f341a0bd90000000000000000000000000000000000000000000000000000000083528860048401525af1611ad5575b509350611a3a565b9050611ae19150612d5a565b8060007f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f611acd565b602490604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b602490604051906322cad1af60e11b82526004820152fd5b3461042f57602036600319011261042f576004356001600160a01b039081811680910361042f578160005416338103610dde5750600a5491816001600160a01b0319841617600a556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26009546000198101908111611c165760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a1005b634e487b7160e01b600052601160045260246000fd5b3461042f57602036600319011261042f57611c45612bd1565b6000546001600160a01b0380821692338403611c97576001600160a01b03199350169182911617600055337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80600080a3005b6040516331b339a960e21b81526001600160a01b0385166004820152336024820152604490fd5b3461042f57602036600319011261042f576001600160a01b03611cdf612bd1565b168015611cfe5760005260066020526020604060002054604051908152f35b608460405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b3461042f57602036600319011261042f57600435611d9f6107528260005260056020526001600160a01b0360406000205416151590565b600052600560205260206001600160a01b0360406000205416604051908152f35b3461042f57602036600319011261042f576020611dde600435612e0b565b6001600160a01b0360405191168152f35b3461042f57600036600319011261042f5760206001600160a01b0360015416604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576105ca60209161488d565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576000611e8e8261480c565b6005811015610c9357600203611eac575b6020906040519015158152f35b50600052600b602052602060ff60406000205460f01c16611e9f565b3461042f57602036600319011261042f57600435611ee461546a565b611eed816134d5565b15611ff557611efb8161589f565b15611b2257611f0981612e0b565b611f128261349e565b159081611fec575b81611fd9575b50611fc157602081611f40600080516020615a4883398151915293612e0b565b9080600052600783526001600160a01b036040600020926001600160a01b031993848154169055169182600052600684526040600020600019815401905581600052600584526040600020908154169055806000604051937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a48152a1005b602490604051906378630aa960e01b82526004820152fd5b6001600160a01b03915016151582611f20565b60009150611f1a565b602490604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b3461042f5761203436612c11565b60405191602083019383851067ffffffffffffffff86111761206057610bc69460405260008452612ede565b634e487b7160e01b600052604160045260246000fd5b3461042f57602036600319011261042f5760206104796004356134d5565b3461042f5760208060031936011261042f57600435906120b261546a565b6120bb826134d5565b156120d85760248260405190634a5541ef60e01b82526004820152fd5b6120e182613525565b6119195761210582600052600b6020526001600160a01b0360406000205416331490565b1580612415575b6118da576121198261366b565b9180600052600b8252612132600260406000200161346a565b926001600160801b03908185511682821610156118c25782600052600b845260ff60406000205460f01c16156118aa5780828561217561217f94838a511661350c565b970151169061350c565b9082600052600b84526040600020916003835493600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616178155838316156123fb575b0191861691826fffffffffffffffffffffffffffffffff198254161790556122136001600160a01b03809416926005875283856040600020541695600b8952600160406000200154166154c6565b33820361231b57823b61227a575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd28491600080516020615a48833981519152975b604080516001600160801b03928316815292909116602083015290a4604051908152a1005b823b1561042f576040516372eba20360e01b8152600481018590526001600160a01b03831660248201526001600160801b03878116604483015282166064820152600080516020615a488339815191529685927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd292909190600081608481838b5af161230c575b509750915050612221565b61231590612d5a565b89612301565b813b61235a575b7f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd28491600080516020615a4883398151915297612255565b813b1561042f576040516372eba20360e01b8152600481018590526001600160a01b03841660248201526001600160801b03878116604483015282166064820152600080516020615a488339815191529685927f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd292909190600081608481838a5af16123ec575b509750915050612322565b6123f590612d5a565b896123e1565b60018101600160a01b60ff60a01b198254161790556121c5565b5081600052600581526001600160a01b036040600020541633141561210c565b3461042f57602036600319011261042f576001600160a01b03612456612bd1565b16600052600260205260206001600160801b0360406000205416604051908152f35b3461042f57610bc661248936612c11565b9161249c6124978433612f74565b612e6d565b613053565b3461042f57600036600319011261042f576020600954604051908152f35b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d8576124f99061480c565b6005811015610c9357806020911590811561251a575b506040519015158152f35b60019150148261250f565b3461042f576020600319818136011261042f576004359067ffffffffffffffff9081831161042f576101208336039182011261042f5761256361546a565b610104830135906022190181121561042f57820160048101359082821161042f57602401606082023603811361042f5761259e913691613568565b918251906125ab826133a5565b916125b96040519384612d6e565b808352601f196125c8826133a5565b018660005b82811061278a5750505064ffffffffff90814216946001600160801b0396876125f5826136d6565b515116828a612603846136d6565b5101511685806040612614866136d6565b510151168a0116906040519261262984612ce8565b83528b830152604082015261263d876136d6565b52612647866136d6565b5060019386855b8a8c87831061270957908b846001600160a01b038c60a48101358281169081900361042f57610959956126c9956126f99461268b60248601613607565b61269760448701613607565b6126a360648801613614565b916126b088600401613614565b94846126be60848b01613628565b966040519d8e612d04565b168c528d8c0152151560408b0152151560608a01521660808801521660a086015260c085015260c436910161363c565b60e0830152610100820152614908565b88938580604061273d8b8661272d8a8e9a612724828d6136f9565b5151169a6136f9565b51015116946000198901906136f9565b5101511681604061274e888c6136f9565b510151160116916040519361276285612ce8565b84528301526040820152612776828b6136f9565b52612781818a6136f9565b5001879061264e565b61279261344b565b8282880101520187906125cd565b3461042f57602036600319011261042f5760043580600052600b60205260ff60016040600020015460a81c16156104d85760209060009080600052600b8352604060002060ff815460f01c1680612833575b61280a575b50506001600160801b0360405191168152f35b61282c92506001600160801b036002612826920154169161366b565b9061350c565b82806127f7565b5060ff600182015460a01c16156127f2565b3461042f57604036600319011261042f5761285e612bd1565b602435906001600160a01b03808061287585612e0b565b1692169180831461296f5780331490811561294a575b50156128e0578260005260076020526040600020826001600160a01b03198254161790556128b883612e0b565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b608460405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600860205260406000203360005260205260ff604060002054168461288b565b608460405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b3461042f57602036600319011261042f576020611dde600435612e30565b3461042f57600036600319011261042f57604051600060035490600182811c91818416918215612ab0575b60209485851084146110bf57858794868652918260001461109f575050600114612a53575061102e92500383612d6e565b84915060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906000915b858310612a9857505061102e935082010185611021565b80548389018501528794508693909201918101612a81565b92607f1692612a22565b3461042f57602036600319011261042f57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361042f57817f80ac58cd0000000000000000000000000000000000000000000000000000000060209314908115612b5f575b8115612b35575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612b2e565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612b27565b60005b838110612b9c5750506000910152565b8181015183820152602001612b8c565b90602091612bc581518092818552858086019101612b89565b601f01601f1916010190565b600435906001600160a01b038216820361042f57565b602435906001600160a01b038216820361042f57565b35906001600160a01b038216820361042f57565b606090600319011261042f576001600160a01b0390600435828116810361042f5791602435908116810361042f579060443590565b9181601f8401121561042f5782359167ffffffffffffffff831161042f576020808501948460051b01011161042f57565b90815180825260208080930193019160005b828110612c97575050505090565b835180516001600160801b031686528083015167ffffffffffffffff168684015260409081015164ffffffffff169086015260609094019392810192600101612c89565b3590811515820361042f57565b6060810190811067ffffffffffffffff82111761206057604052565b610120810190811067ffffffffffffffff82111761206057604052565b6040810190811067ffffffffffffffff82111761206057604052565b610160810190811067ffffffffffffffff82111761206057604052565b67ffffffffffffffff811161206057604052565b90601f8019910116810190811067ffffffffffffffff82111761206057604052565b67ffffffffffffffff811161206057601f01601f191660200190565b35906001600160801b038216820361042f57565b15612dc757565b606460405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b60005260056020526001600160a01b0360406000205416612e2d811515612dc0565b90565b612e536107528260005260056020526001600160a01b0360406000205416151590565b60005260076020526001600160a01b036040600020541690565b15612e7457565b608460405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b90612f02939291612ef26124978433612f74565b612efd838383613053565b61320c565b15612f0957565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b906001600160a01b038080612f8884612e0b565b16931691838314938415612fbb575b508315612fa5575b50505090565b612fb191929350612e30565b1614388080612f9f565b909350600052600860205260406000208260005260205260ff604060002054169238612f97565b15612fe957565b608460405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b9061307c929161306283612e0b565b916001600160a01b03948593848094169687911614612fe2565b16908115806131735761308e8461349e565b15908161316a575b5080613161575b61314957918084926130cb600080516020615a48833981519152966020966130c485612e0b565b1614612fe2565b60009382855260078652604085206001600160a01b031990818154169055818652600687526040862060001981540190558286526040862060018154019055838652600587528260408720918254161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519580a48152a1565b602483604051906378630aa960e01b82526004820152fd5b5083151561309d565b90501538613096565b608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d15613207573d906131ed82612d90565b916131fb6040519384612d6e565b82523d6000602084013e565b606090565b9290803b1561339c57613276916020916001600160a01b0394604051809581948293897f150b7a02000000000000000000000000000000000000000000000000000000009b8c86523360048701521660248501526044840152608060648401526084830190612bac565b03916000968791165af190829082613335575b505061330f576132976131dc565b8051908161330a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d8211613394575b8161335160209383612d6e565b810103126133905751907fffffffff000000000000000000000000000000000000000000000000000000008216820361338d5750903880613289565b80fd5b5080fd5b3d9150613344565b50505050600190565b67ffffffffffffffff81116120605760051b60200190565b9081546133c9816133a5565b926040936133d985519182612d6e565b828152809460208092019260005281600020906000935b8585106133ff57505050505050565b6001848192845161340f81612ce8565b64ffffffffff87546001600160801b038116835267ffffffffffffffff8160801c168584015260c01c16868201528152019301940193916133f0565b6040519061345882612ce8565b60006040838281528260208201520152565b9060405161347781612ce8565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260ff60016040600020015460b01c1690565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260ff60016040600020015460a01c1690565b6001600160801b039182169082160391908211611c1657565b80600052600b60205260ff60016040600020015460a81c16156104d857600052600b60205260406000205460f81c90565b359064ffffffffff8216820361042f57565b929192613574826133a5565b60409461358386519283612d6e565b8195848352602080930191606080960285019481861161042f57925b8584106135af5750505050505050565b868483031261042f578251906135c482612ce8565b6135cd85612dac565b8252858501359067ffffffffffffffff8216820361042f57828792838b9501526135f8868801613556565b8682015281520193019261359f565b35801515810361042f5790565b356001600160a01b038116810361042f5790565b356001600160801b038116810361042f5790565b919082604091031261042f5760405161365481612d21565b602080829461366281612bfd565b84520135910152565b64ffffffffff80421682600052600b602052604060002091825482828260a01c1610156136cc5760c81c1611156136ba5760040154600110156136b157612e2d9061370d565b612e2d9061473d565b6001600160801b039150600201541690565b5050505050600090565b8051156136e35760200190565b634e487b7160e01b600052603260045260246000fd5b80518210156136e35760209160051b010190565b64ffffffffff90814216906000908152600b60205260409081812082519361373485612d3d565b8154956001600160a01b039182881687526020870197828160a01c168952828160c81c168789015260ff8160f01c161515606089015260f81c1515608088015260ff6001938486015490811660a08a0152818160a01c16151560c08a0152818160a81c16151560e08a015260b01c1615156101008801526101406137ce60046137bf6002880161346a565b966101208b01978852016133bd565b97019187835280876137e0889a6136d6565b5101511693828288965b16106138c45750916138746138799284888161387e98976001600160801b039e8f6138168b8a516136f9565b5151169d8a8f9b602061383367ffffffffffffffff928d516136f9565b510151169984836138458484516136f9565b51015116965081156138b857613863929350519060001901906136f9565b5101511680925b0316920316613938565b613ca7565b613b0a565b92831361389757505061389183916138fc565b16011690565b5160200151929392831692841683101591506138b39050575090565b905090565b5050505116809261386a565b8094986001600160801b0390816138dc8c88516136f9565b51511601169801938282808a6138f38989516136f9565b510151166137ea565b600081126139075790565b602490604051907f2463f3d50000000000000000000000000000000000000000000000000000000082526004820152fd5b90600160ff1b808314908115613a20575b506139f65760008212156139ed57613972826000035b60008312156139e6578260000390613a2a565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116139b057600091600019911813156139ac575090565b0390565b604491604051917fd49c26b300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290613a2a565b6139728261395f565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b9050811438613949565b670de0b6b3a7640000916000198383099280830292838086109503948086039514613ae65782851015613aaa57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b505080925015613af4570490565b634e487b7160e01b600052601260045260246000fd5b90600160ff1b808314908115613bee575b50613bc4576000821215613bbb57613b44826000035b6000831215613bb4578260000390613bf8565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311613b7e57600091600019911813156139ac575090565b604491604051917f120b5b4300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290613bf8565b613b4482613b31565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b9050811438613b1b565b90919060001983820983820291828083109203918083039214613c9657670de0b6b3a76400009081831015613c5f57947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b80613cc15750600090612e2d5750670de0b6b3a764000090565b90670de0b6b3a7640000808314613d0e575080613ce6575050670de0b6b3a764000090565b670de0b6b3a76400008114613d0a57613d0590613879612e2d936145e8565b613d2e565b5090565b91505090565b8015613af4576ec097ce7bc90715b34b9f10000000000590565b6000811215613d635768033dd1780914b97114198112613d5d57613d5490600003613d2e565b612e2d90613d14565b50600090565b680a688906bd8affffff81136145b757670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff00000000000000831661449a575b66ff0000000000008316614392575b65ff00000000008316614292575b64ff00000000831661419a575b63ff00000083166140aa575b62ff00008316613fc2575b61ff008316613ee2575b60ff8316613e0b575b02911c60bf031c90565b60808316613ed0575b838316613ebe575b60208316613eac575b60108316613e9a575b60088316613e88575b60048316613e76575b60028316613e64575b6001831615613e01576801000000000000000102831c613e01565b6801000000000000000102831c613e49565b6801000000000000000302831c613e40565b6801000000000000000602831c613e37565b6801000000000000000b02831c613e2e565b6801000000000000001602831c613e25565b6801000000000000002c02831c613e1c565b6801000000000000005902831c613e14565b6180008316613fb0575b6140008316613f9e575b6120008316613f8c575b6110008316613f7a575b6108008316613f68575b6104008316613f56575b6102008316613f44575b610100831615613df857680100000000000000b102831c613df8565b6801000000000000016302831c613f28565b680100000000000002c602831c613f1e565b6801000000000000058c02831c613f14565b68010000000000000b1702831c613f0a565b6801000000000000162e02831c613f00565b68010000000000002c5d02831c613ef6565b680100000000000058b902831c613eec565b628000008316614098575b624000008316614086575b622000008316614074575b621000008316614062575b620800008316614050575b62040000831661403e575b62020000831661402c575b62010000831615613dee576801000000000000b17202831c613dee565b680100000000000162e402831c61400f565b6801000000000002c5c802831c614004565b68010000000000058b9102831c613ff9565b680100000000000b172102831c613fee565b68010000000000162e4302831c613fe3565b680100000000002c5c8602831c613fd8565b6801000000000058b90c02831c613fcd565b63800000008316614188575b63400000008316614176575b63200000008316614164575b63100000008316614152575b63080000008316614140575b6304000000831661412e575b6302000000831661411c575b6301000000831615613de35768010000000000b1721802831c613de3565b6801000000000162e43002831c6140fe565b68010000000002c5c86002831c6140f2565b680100000000058b90c002831c6140e6565b6801000000000b17217f02831c6140da565b680100000000162e42ff02831c6140ce565b6801000000002c5c85fe02831c6140c2565b68010000000058b90bfc02831c6140b6565b6480000000008316614280575b644000000000831661426e575b642000000000831661425c575b641000000000831661424a575b6408000000008316614238575b6404000000008316614226575b6402000000008316614214575b640100000000831615613dd757680100000000b17217f802831c613dd7565b68010000000162e42ff102831c6141f5565b680100000002c5c85fe302831c6141e8565b6801000000058b90bfce02831c6141db565b68010000000b17217fbb02831c6141ce565b6801000000162e42fff002831c6141c1565b68010000002c5c8601cc02831c6141b4565b680100000058b90c0b4902831c6141a7565b658000000000008316614380575b65400000000000831661436e575b65200000000000831661435c575b65100000000000831661434a575b650800000000008316614338575b650400000000008316614326575b650200000000008316614314575b65010000000000831615613dca576801000000b17218355102831c613dca565b680100000162e430e5a202831c6142f4565b6801000002c5c863b73f02831c6142e6565b68010000058b90cf1e6e02831c6142d8565b680100000b1721bcfc9a02831c6142ca565b68010000162e43f4f83102831c6142bc565b680100002c5c89d5ec6d02831c6142ae565b6801000058b91b5bc9ae02831c6142a0565b66800000000000008316614488575b66400000000000008316614476575b66200000000000008316614464575b66100000000000008316614452575b66080000000000008316614440575b6604000000000000831661442e575b6602000000000000831661441c575b6601000000000000831615613dbc5768010000b17255775c0402831c613dbc565b6801000162e525ee054702831c6143fb565b68010002c5cc37da949202831c6143ec565b680100058ba01fb9f96d02831c6143dd565b6801000b175effdc76ba02831c6143ce565b680100162f3904051fa102831c6143bf565b6801002c605e2e8cec5002831c6143b0565b68010058c86da1c09ea202831c6143a1565b6780000000000000008316614598575b6740000000000000008316614586575b6720000000000000008316614574575b6710000000000000008316614562575b6708000000000000008316614550575b670400000000000000831661453e575b670200000000000000831661452c575b670100000000000000831615613dad57680100b1afa5abcbed6102831c613dad565b68010163da9fb33356d802831c61450a565b680102c9a3e778060ee702831c6144fa565b6801059b0d31585743ae02831c6144ea565b68010b5586cf9890f62a02831c6144da565b6801172b83c7d517adce02831c6144ca565b6801306fe0a31b7152df02831c6144ba565b5077b504f333f9de6484800000000000000000000000000000006144aa565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b8060008083131561470c57670de0b6b3a7640000928381126146d557506001925b808305906001600160801b03821160071b91821c9167ffffffffffffffff831160061b92831c63ffffffff811160051b90811c61ffff811160041b90811c60ff811160031b90811c91600f831160021b92831c936001978860038711811b96871c11961717171717171781810294811d908282146146c957506706f05b59d3b20000905b84821361469d5750505050500290565b808391020590671bc16d674ec800008212156146bc575b831d9061468d565b8091950194831d906146b4565b93505093925050020290565b60001993925080156146f8576ec097ce7bc90715b34b9f10000000000591614609565b602482634e487b7160e01b81526012600452fd5b602483604051907f059b101b0000000000000000000000000000000000000000000000000000000082526004820152fd5b64ffffffffff614772600091838352600b60205280806040852054818160a01c1693849160c81c160316918142160316613938565b91808252600b602052600460408320018054156147f85790829167ffffffffffffffff93526147ca6020832054828452600b6020526138796001600160801b03968760026040882001541696879360801c1690613ca7565b9283136147e05750506147dc906138fc565b1690565b60029350604092508152600b60205220015460801c90565b602483634e487b7160e01b81526032600452fd5b80600052600b602052604060002060ff600182015460a01c16600014614833575050600490565b805460f81c614886575460a01c64ffffffffff164210613d5d576148568161366b565b90600052600b6020526001600160801b03806002604060002001541691161060001461488157600190565b600290565b5050600390565b80600052600b6020526148a6600260406000200161346a565b81600052600b602052604060002060ff600182015460a01c166000146148d957506001600160801b039150602001511690565b5460f81c6148eb5750612e2d9061366b565b612e2d91506001600160801b03604081835116920151169061350c565b906001600160a01b036001541660206001600160a01b0360c0850151166024604051809481937fdcf844a700000000000000000000000000000000000000000000000000000000835260048301525afa8015610840576000906151d9575b61498991506001600160801b0360a08501511690602060e0860151015191615908565b6001600160801b038151166101008401519064ffffffffff60208601511681156151af5782518015615185577f00000000000000000000000000000000000000000000000000000000000000008111615154575064ffffffffff60406149ee856136d6565b510151168110156150fd5750600091829083815185905b80821061506a575050505064ffffffffff421664ffffffffff821681101561502a5750506001600160801b0382168103614fe85750506009549283600052600b6020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b0360c083015116600184015490750100000000000000000000000000000000000000000060408501511515928654927fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff000000000000000000000000000000000000000000006060890151151560b01b16921617171760018601556001600160a01b0384511691610100850151926040614b208551956000198701906136f9565b510151927fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff0000000000000000000000000000000000000000000000000078ffffffffff000000000000000000000000000000000000000060208b015160a01b169660c81b169460f01b16911617171717845560005b818110614f18575050600185016009556001600160a01b0360c08301511660005260026020526001600160801b0380604060002054168160208401511601166001600160a01b0360c0840151166000526040600020906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036080830151168015614ed457614c67614c618760005260056020526001600160a01b0360406000205416151590565b15615387565b614c708661349e565b1580614ecb575b80614ec3575b614eab576020600080516020615a4883398151915291614cb6614c618960005260056020526001600160a01b0360406000205416151590565b806000526006825260406000206001815401905587600052600582526040600020816001600160a01b0319825416179055876040519160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4878152a1614d466001600160a01b0360c0840151166001600160801b0380845116816020860151160116903090339061520d565b6001600160801b0360408201511680614e7c575b507fef3d668acee46576ad5d407c42ab4d0cde13f3cd70b28f09a0fb9e3bf5bf09cb614e396001600160a01b03845116926001600160a01b03608086015116946001600160a01b0360c08201511696614e71614e5160408401511515928c606086015115156001600160a01b0360e061010089015194549864ffffffffff6040519a614de58c612d21565b818160a01c168c5260c81c1660208b01520151511695604051998a99610160948b523360208c015260408b0190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60a089015260c08801528060e0880152860190612c77565b926101008501906020908164ffffffffff91828151168552015116910152565b6101408301520390a4565b614ea5906001600160a01b0360c0850151166001600160a01b0360e0860151511690339061520d565b38614d5a565b602486604051906378630aa960e01b82526004820152fd5b506000614c7d565b50801515614c77565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b614f27816101008601516136f9565b51906004860154916801000000000000000083101561206057600183018060048901558310156136e35760019260048801600052602060002001906001600160801b03815116908254917fffffff00000000000000000000000000000000000000000000000000000000007cffffffffff000000000000000000000000000000000000000000000000604077ffffffffffffffff00000000000000000000000000000000602086015160801b1694015160c01b169316171717905501614bbc565b6040517fd90b7e390000000000000000000000000000000000000000000000000000000081526001600160801b03918216600482015291166024820152604490fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b919350919461508e906001600160801b0361508585896136f9565b5151169061566a565b9464ffffffffff8060406150a286856136f9565b510151169416808511156150c0575060018493019192919092614a05565b8385606492604051927f7b0bada8000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff604061510e856136d6565b5101516040517fb4c9e52c00000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f4757689b0000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3952c64e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b6020823d602011615205575b816151f260209383612d6e565b8101031261338d57506149899051614966565b3d91506151e5565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176120605761527c9260405261527e565b565b6001600160a01b0316906152de60405161529781612d21565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16152d86131dc565b916153d2565b805191821591848315615363575b5050509050156152f95750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b9193818094500103126133905782015190811515820361338d5750803880846152ec565b1561538e57565b606460405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b9192901561543357508151156153e6575090565b3b156153ef5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156154465750805190602001fd5b6104039060405191829162461bcd60e51b8352602060048401526024830190612bac565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361549c57565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000006020850152166024830152604482015260448152608081019181831067ffffffffffffffff8411176120605761527c9260405261527e565b612e2d906155398161488d565b90600052600b60205260026040600020015460801c9061350c565b91908110156136e35760051b0190565b929190615570846134d5565b6104175761559484600052600b6020526001600160a01b0360406000205416331490565b158061565a575b6103e4576155bf84600052600b6020526001600160a01b0360406000205416331490565b80615636575b615609576001600160a01b03811615610369576001600160801b038216156155f15761527c9293615685565b6024846040519063d2aabcd960e01b82526004820152fd5b836001600160a01b0360649260405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b508360005260056020526001600160a01b03806040600020541690821614156155c5565b506156648461589f565b1561559b565b9190916001600160801b0380809416911601918211611c1657565b929190926001600160801b038061569b8361552c565b1692818116938085116158625750600095838752602092600b84526157006156ce6040946002868c20015460801c61566a565b868a52600b86526002858b200190836fffffffffffffffffffffffffffffffff1983549260801b16911617815561346a565b9061571b81868401511692828681835116920151169061350c565b161115615833575b838752600b83526001600160a01b03916157468683856001858d200154166154c6565b848852600584528281892054168033141580615829575b615792575b507ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9495969750519586521693a3565b803b156158255797807ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9697989960848451809481937f13375c3b0000000000000000000000000000000000000000000000000000000083528c600484015233602484015289891660448401528d60648401525af1615816575b8897969550615762565b61581f90612d5a565b3861580c565b8880fd5b50803b151561575d565b838752600b835281872060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055615723565b8360649186604051927fa1fb2bbc000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60009080825260056020526001600160a01b0380604084205416928333149384156158e4575b505082156158d257505090565b9091506158df3392612e30565b161490565b60ff92945090604091815260086020528181203382526020522054169138806158c5565b90929161591361344b565b936001600160801b0392838116918215615a1f5767016345785d8a00008082116159e8578085116159b1575061595d8561594e819386613bf8565b16946020890195865284613bf8565b16918461597460408901948086528287511661566a565b16101561599b5761598d8491826159969551169061350c565b9151169061350c565b168252565b634e487b7160e01b600052600160045260246000fd5b84604491604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60449250604051917f47152d6700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50505050509050604051615a3281612ce8565b6000815260006020820152600060408201529056fef8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7"; bytes public constant BYTECODE_LOCKUP_LINEAR = - hex"60a034620003e757601f196001600160401b03601f62004a3e3881900382810185168601919084831187841017620003ec57808792606094604052833981010312620003e75783516001600160a01b03928382169291839003620003e7576020918287015196858816809803620003e75760400151948516809503620003e7576200008962000402565b90601c82527f5361626c696572205632204c6f636b7570204c696e656172204e46540000000084830152620000bd62000402565b601181527029a0a116ab1916a627a1a5aaa816a624a760791b8582015230608052600080546001600160a01b031990811688178255600180548216909b178b5596817fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a38351858111620003d35760039485548c81811c91168015620003c8575b89821014620003b45790818684931162000361575b508890868311600114620002f8578492620002ec575b505060001982871b1c1916908b1b1784555b8151948511620002d8576004958654998b8b811c9b168015620002cd575b828c1014620002ba57848b1162000271575b869798999a50819487116001146200020a57505093620001fe575b505082871b92600019911b1c19161790555b600a541617600a5560095560405161461b9081620004238239608051816141090152f35b015191503880620001c8565b8883528183208c9890969594939116915b8282106200025757505085116200023c575b50505050811b019055620001da565b01519060f884600019921b161c19169055388080806200022d565b8484015187558c989096019593840193908101906200021b565b87835281832085880160051c81019b838910620002af575b860160051c019a8c905b8c8110620002a3575050620001ad565b848155018c9062000293565b909b508b9062000289565b634e487b7160e01b835260228852602483fd5b9a607f169a6200019b565b634e487b7160e01b81526041600452602490fd5b0151905038806200016b565b908c8e9416918886528a862092865b8c82821062000341575050841162000328575b505050811b0184556200017d565b015160001983891b60f8161c191690553880806200031a565b91929395968291958786015181550195019301908f959493929162000307565b9091508684528884208680850160051c8201928b8610620003aa575b918f91869594930160051c01915b8281106200039b57505062000155565b8681558594508f91016200038b565b925081926200037d565b634e487b7160e01b84526022600452602484fd5b90607f169062000140565b634e487b7160e01b82526041600452602482fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620003ec5760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a7146129a25750806306fdde03146128e0578063081812fc146128c1578063095ea7b3146127325780631400ecec146126925780631c1cdd4c1461262d5780631e99d5691461260f57806323b872dd146125e557806339a73c03146125a457806340e58ee514612200578063425d30dd146121e157806342842e0e1461219157806342966c68146120395780634857501f14611faf5780634869e12d14611f745780635fe3b56714611f4d5780636352211e14611f1d5780636d0cee7514611ec757806370a0823114611e1e57806375829def14611d8b578063780a82c814611d3b5780637cad6cd114611c6a5780637de6b1db14611a915780638659c2701461167d578063894e9a0d146114295780638bad38dd146113ac5780638f69b993146113105780639067b677146112bd57806395d89b41146111b057806396ce143114611091578063a22cb46514610fc0578063a2ffb89714610d82578063a6202bf214610c7c578063a80fc07114610c2a578063ab167ccc14610af1578063ad35efd414610a8f578063b256456914610a70578063b88d4fde146109df578063b8a3be66146109aa578063b971302a1461095b578063bc063e1a14610938578063bc2be1be146108e8578063c156a11d1461082d578063c87b56dd146106ef578063cc364f4814610643578063d4dbd20b146105f1578063d511609f146105a5578063d975dfed14610559578063e985e9c514610504578063ea5ead19146104de578063eac8f5b814610475578063f590c1761461044c578063f851a440146104265763fdd46d601461027357600080fd5b346104235760603660031901126104235760043561028f612ad1565b610297612c11565b906102a06140ff565b6102a98361328d565b61040b576102cd83600052600b6020526001600160a01b0360406000205416331490565b15806103fb575b6103d8576102f883600052600b6020526001600160a01b0360406000205416331490565b806103b6575b610389576001600160a01b0381161561035f576001600160801b03821615610347579161033d6020926000805160206145fb833981519152948361422a565b604051908152a180f35b6024836040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b826001600160a01b0360649260405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b5082845260056020526001600160a01b038060408620541690821614156102fe565b60405163216caf0d60e01b815260048101849052336024820152604490fd5b0390fd5b5061040583614452565b156102d4565b60248360405190634a5541ef60e01b82526004820152fd5b80fd5b50346104235780600319360112610423576001600160a01b036020915416604051908152f35b503461042357602036600319011261042357602061046b6004356132f3565b6040519015158152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760016040836001600160a01b039360209552600b855220015416604051908152f35b6024906040519062b8e7e760e51b82526004820152fd5b5034610423576040366003190112610423576004356104fb612ad1565b610297826141c1565b50346104235760403660031901126104235761051e612abb565b6040610528612ad1565b926001600160a01b0380931681526008602052209116600052602052602060ff604060002054166040519015158152f35b50346104235760203660031901126104235760ff6001604060043593848152600b60205220015460d01c16156104c7576105946020916141c1565b6001600160801b0360405191168152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408260029260209452600b845220015460801c604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760036040836001600160801b039360209552600b855220015416604051908152f35b503461042357602036600319011261042357600435610660613203565b50808252600b60205260ff600160408420015460d01c16156104c7578160409160609352600b60205220805490600164ffffffffff91015481604051936106a685612b9b565b818160a01c16855260c81c16602084015260a01c1660408201526106ed60405180926040908164ffffffffff91828151168552826020820151166020860152015116910152565bf35b5034610423576020806003193601126108195760043561072d6107288260005260056020526001600160a01b0360406000205416151590565b612c27565b826001600160a01b03600a5416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa92831561082157809361079c575b5050610798604051928284938452830190612a96565b0390f35b909192503d8082843e6107af8184612bd3565b82019183818403126108195780519067ffffffffffffffff821161081d570182601f82011215610819578051916107e583612bf5565b936107f36040519586612bd3565b83855285848401011161042357509061081191848085019101612a73565b903880610782565b5080fd5b8280fd5b604051903d90823e3d90fd5b50346104235760403660031901126104235760043561084a612ad1565b6108526140ff565b818352600b60205260ff600160408520015460d01c16156108d15781835260056020526001600160a01b036040842054168033036103d8579161033d816020936000805160206145fb833981519152956108ab836141c1565b6001600160801b0381166108c0575b50612eba565b6108cb90828561422a565b386108ba565b6024826040519062b8e7e760e51b82526004820152fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408264ffffffffff9260209452600b8452205460a01c16604051908152f35b5034610423578060031936011261042357602060405167016345785d8a00008152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c7576040826001600160a01b039260209452600b8452205416604051908152f35b50346104235760203660031901126104235760ff600160406020936004358152600b855220015460d01c166040519015158152f35b5034610423576080366003190112610423576109f9612abb565b610a01612ad1565b906064359067ffffffffffffffff8211610a6c5736602383011215610a6c5781600401359284610a3085612bf5565b93610a3e6040519586612bd3565b85855236602487830101116108195785610a6996602460209301838801378501015260443591612d45565b80f35b8380fd5b503461042357602036600319011261042357602061046b600435613256565b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c757610ac890613569565b604051906005811015610add57602092508152f35b602483634e487b7160e01b81526021600452fd5b50346104235761014036600319011261042357610b0c6140ff565b610b14613203565b9064ffffffffff80421680845260c4358281168103610c255781018216602085015260e435908183168203610c255701166040830152606435916001600160a01b03918284168094036104235750608435801515809103610c255760a43590811515809203610c255760243594848616809603610c255760043595858716809703610c2557604435906001600160801b038216809203610c255760405197610bbb89612b7e565b8852602088015260408701526060860152608085015260a084015260c0830152604061010319360112610c255760405191610bf583612bb7565b610104359182168203610c255782610c1d9260209452610124358482015260e082015261366b565b604051908152f35b600080fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760026040836001600160801b039360209552600b855220015416604051908152f35b503461042357602036600319011261042357610c96612abb565b6001600160a01b0380835416338103610d59575081169081835260026020526001600160801b03604084205416908115610d285781610cf9918486526002602052604086206fffffffffffffffffffffffffffffffff198154169055339061415b565b6040519081527fca7a4a65a94ed2f37538814e00e1cd4c41a78261561e3f3794592f11409cf5af60203392a380f35b602483604051907f8410168c0000000000000000000000000000000000000000000000000000000082526004820152fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b50346104235760603660031901126104235767ffffffffffffffff60043581811161081d57610db5903690600401612b1c565b91610dbe612ad1565b90604435908111610fbc57610dd7903690600401612b1c565b9093610de16140ff565b818103610f8657855b818110610df5578680f35b610e008183876141e9565b35610e0c8285896141e9565b356001600160801b0381168103610c2557610e256140ff565b610e2e8261328d565b610f6e57610e5282600052600b6020526001600160a01b0360406000205416331490565b1580610f5e575b610f3f57610e7d82600052600b6020526001600160a01b0360406000205416331490565b80610f17575b610eea576001600160a01b0386161561035f576001600160801b03811615610ed257602082610ec56000805160206145fb83398151915293896001979661422a565b604051908152a101610dea565b6024826040519063d2aabcd960e01b82526004820152fd5b6064826001600160a01b038860405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b5081895260056020526001600160a01b0360408a2054166001600160a01b0387161415610e83565b60405163216caf0d60e01b815260048101839052336024820152604490fd5b50610f6882614452565b15610e59565b60248260405190634a5541ef60e01b82526004820152fd5b604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8480fd5b503461042357604036600319011261042357610fda612abb565b60243590811515809203610c25576001600160a01b03169081331461104d5733835260086020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b606460405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b503461042357610160366003190112610423576110ac6140ff565b604051906110b982612b7e565b6110c1612abb565b82526110cb612ad1565b60208301526110d8612c11565b60408301526001600160a01b03906064358281168103610c255760608401526084358015158103610c2557608084015260a4358015158103610c255760a084015260603660c3190112610423575060405161113281612b9b565b64ffffffffff60c4358181168103610c2557825260e4358181168103610c25576020830152610104359081168103610c2557604082015260c0830152604061012319360112610c25576040519161118883612bb7565b610124359182168203610c255782610c1d9260209452610144358482015260e082015261366b565b5034610423578060031936011261042357604051908060045491600183811c928185169485156112b3575b602095868610811461129f5785885287949392918790821561127d575050600114611223575b505061120f92500383612bd3565b610798604051928284938452830190612a96565b90859250600482527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b85831061126557505061120f93508201013880611201565b8054838901850152879450869390920191810161124d565b925093505061120f94915060ff191682840152151560051b8201013880611201565b602483634e487b7160e01b81526022600452fd5b93607f16936111db565b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c757600160408364ffffffffff9360209552600b855220015460a01c16604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75761134990613569565b906005821015908161138a576002831491821561139e575b8215611375575b6020836040519015158152f35b90915061138a57506004602091143880611368565b80634e487b7160e01b602492526021600452fd5b506003831491506000611361565b5034610423576020366003190112610423576004356001600160a01b039081811680910361081d5781835416338103610d59575060015491816001600160a01b03198416176001556040519216825260208201527fdcb09aef4bf01068924ccce937981cbe59d25ba08380cf941aaaea4e4bd3960d60403392a280f35b50346104235760203660031901126104235760405161144781612b61565b8181528160208201528160408201528160608201528160808201528160a08201528160c08201528160e0820152816101008201528161012082015261014061148d613203565b9101526004358152600b60205260ff600160408320015460d01c1615611665576004358152600b602052604081206115666002604051926114cd84612b61565b80546001600160a01b038116855264ffffffffff8160a01c16602086015264ffffffffff8160c81c16604086015260ff8160f01c161515606086015260f81c1515608085015260ff60018201546001600160a01b03811660a087015264ffffffffff8160a01c1660c0870152818160c81c16151560e0870152818160d01c16151561010087015260d81c16151561012085015201613222565b610140820152611577600435613569565b6005811015610add579160026101a0931461165a575b506106ed610140604051926001600160a01b03815116845264ffffffffff602082015116602085015264ffffffffff60408201511660408501526060810151151560608501526080810151151560808501526001600160a01b0360a08201511660a085015264ffffffffff60c08201511660c085015260e0810151151560e0850152610100810151151561010085015261012081015115156101208501520151610140830190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60608201523861158d565b602460405162b8e7e760e51b81526004356004820152fd5b503461042357602090816003193601126104235760043567ffffffffffffffff8111610819576116b283913690600401612b1c565b906116bb6140ff565b83915b8083106116c9578480f35b6116d8838284979596976141e9565b35936116e26140ff565b6116eb8561328d565b156117085760248560405190634a5541ef60e01b82526004820152fd5b90919293611715816132f3565b611a795761173981600052600b6020526001600160a01b0360406000205416331490565b1580611a5b575b611a3b5761174d81613324565b818652600b9081885261176560026040892001613222565b6001600160801b0391828251168382161015611a2357848952838a5260ff60408a205460f01c1615611a0b579282826117b786838e6117ad8f9a829a60409e9d9a51166132c4565b94015116906132c4565b84875283865288872091611846835494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871617855560038185169586156119f1575b0190831699818b6fffffffffffffffffffffffffffffffff19819454161790556001600160a01b0380971696879160058c52818f82205416998c5260019e8f912001541661415b565b33840361192f57843b6118a8575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd260406000805160206145fb8339815191529786935b825191825288820152a4604051908152a10191909392936116be565b90919293809596503b1561192b576040516372eba20360e01b8152600481018790526001600160a01b03851660248201526001600160801b039182166044820152911660648201528b94939291908b90818160848183895af115611854576119169192939597949650612b4d565b61192757918a939194928a8d611854565b8980fd5b8b80fd5b833b611972575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd260406000805160206145fb83398151915297869361188c565b90919280949596503b1561192b576040516372eba20360e01b8152600481018790526001600160a01b03861660248201526001600160801b039182166044820152911660648201528b94939291908b90818160848183885af115611936576119e09192939597949650612b4d565b61192757918a939194928a8d611936565b60018101600160c81b60ff60c81b198254161790556117fd565b602485604051906339c6dc7360e21b82526004820152fd5b602485604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b50808552600586526001600160a01b03604086205416331415611740565b6024906040519063fe19f19f60e01b82526004820152fd5b5034610423576020806003193601126108195760043590611ab06140ff565b818352600b815260ff600160408520015460d01c16156108d157611ad382613569565b6005811015611c565760048103611afc5760248360405190634a5541ef60e01b82526004820152fd5b60038103611b1c576024836040519063fe19f19f60e01b82526004820152fd5b600214611c3e57611b4382600052600b6020526001600160a01b0360406000205416331490565b15610f3f57818352600b815260ff604084205460f01c1615611c2657818352600b81526040832060ff60f01b19815416905560058152826001600160a01b03604082205416803b611bcf575b50506040516000805160206145fb83398151915292807f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8680a28152a180f35b803b15610819578180916024604051809481937f341a0bd90000000000000000000000000000000000000000000000000000000083528960048401525af115611b8f57611c1b90612b4d565b61081d578238611b8f565b602482604051906339c6dc7360e21b82526004820152fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b5034610423576020366003190112610423576004356001600160a01b039081811680910361081d5781835416338103610d595750600a5491816001600160a01b0319841617600a556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26009546000198101908111611d275760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408264ffffffffff9260209452600b8452205460c81c16604051908152f35b503461042357602036600319011261042357611da5612abb565b9080546001600160a01b0380821693338503611df7576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b5034610423576020366003190112610423576001600160a01b03611e40612abb565b168015611e5d578160409160209352600683522054604051908152f35b608460405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b5034610423576020366003190112610423576001600160a01b036040602092600435611f0c6107288260005260056020526001600160a01b0360406000205416151590565b815260058452205416604051908152f35b5034610423576020366003190112610423576020611f3c600435612c72565b6001600160a01b0360405191168152f35b503461042357806003193601126104235760206001600160a01b0360015416604051908152f35b50346104235760203660031901126104235760ff6001604060043593848152600b60205220015460d01c16156104c7576105946020916135f0565b50346104235760203660031901126104235760043590818152600b60205260ff600160408320015460d01c16156108d15780611fea83613569565b9260058410156120255760026020940361200b575b50506040519015158152f35b8152600b8352604090205460f01c60ff1690503880611fff565b602482634e487b7160e01b81526021600452fd5b5034610423576020366003190112610423576004356120566140ff565b61205f8161328d565b156121605761206d81614452565b15611a3b5761207b81612c72565b61208482613256565b159081612158575b81612145575b5061212d576020816120b26000805160206145fb83398151915293612c72565b90808552600783526001600160a01b0360408620926001600160a01b03199384815416905516918286526006845260408620600019815401905581865260058452604086209081541690558085604051937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a48152a180f35b602490604051906378630aa960e01b82526004820152fd5b6001600160a01b03915016151538612092565b83915061208c565b602490604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b5034610423576121a036612ae7565b60405191602083019383851067ffffffffffffffff8611176121cb57610a6994604052858452612d45565b634e487b7160e01b600052604160045260246000fd5b503461042357602036600319011261042357602061046b60043561328d565b503461042357602080600319360112610819576004359061221f6140ff565b6122288261328d565b156122455760248260405190634a5541ef60e01b82526004820152fd5b61224e826132f3565b61258c5761227282600052600b6020526001600160a01b0360406000205416331490565b158061256e575b610f3f5761228682613324565b91808452600b825261229d60026040862001613222565b6001600160801b039384825116858216101561255657828652600b845260ff604087205460f01c161561253e57816122e18287876117ad60409683839951166132c4565b848852600b845282882091612370835498600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b161785558a6003828616968715612524575b019184169a828c6fffffffffffffffffffffffffffffffff198195541617905560016001600160a01b0380921698899360058c52600b8483832054169c522001541661415b565b33840361243b57908891853b6123ce575b5050507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd260406000805160206145fb8339815191529786935b825191825288820152a4604051908152a180f35b853b1561081d576040516372eba20360e01b8152600481018890526001600160a01b03861660248201526001600160801b03918216604482015291166064820152818160848183895af1612423575b80612381565b61242c90612b4d565b61243757863861241d565b8680fd5b83989792983b612483575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2604085926000805160206145fb83398151915298996123ba565b833b15612520576040516372eba20360e01b8152600481018790526001600160a01b03861660248201526001600160801b03918216604482015291166064820152868160848183875af16124d8575b80612446565b604085926000805160206145fb833981519152986125167f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd294612b4d565b98509250506124d2565b8780fd5b60018101600160c81b60ff60c81b19825416179055612329565b602483604051906339c6dc7360e21b82526004820152fd5b602483604051906322cad1af60e11b82526004820152fd5b50818352600581526001600160a01b03604084205416331415612279565b6024826040519063fe19f19f60e01b82526004820152fd5b5034610423576020366003190112610423576001600160801b0360406020926001600160a01b036125d3612abb565b16815260028452205416604051908152f35b503461042357610a696125f736612ae7565b9161260a6126058433612ddb565b612cd4565b612eba565b50346104235780600319360112610423576020600954604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75761266690613569565b90600582101561138a5760208215838115612687575b506040519015158152f35b60019150148261267c565b50346104235760203660031901126104235760043590818152600b60205260ff600160408320015460d01c16156108d157602091604082828152600b85522060ff815460f01c1680612720575b6126f7575b50506001600160801b0360405191168152f35b61271992506001600160801b0360026127139201541691613324565b906132c4565b38806126e4565b5060ff600182015460c81c16156126df565b50346104235760403660031901126104235761274c612abb565b602435906001600160a01b03808061276385612c72565b1692169180831461285757803314908115612836575b50156127cc57828452600760205260408420826001600160a01b03198254161790556127a483612c72565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b608460405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050845260086020526040842033855260205260ff60408520541638612779565b608460405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b5034610423576020366003190112610423576020611f3c600435612c97565b5034610423578060031936011261042357604051908060035491600183811c92818516948515612998575b602095868610811461129f5785885287949392918790821561127d57505060011461293e57505061120f92500383612bd3565b90859250600382527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b85831061298057505061120f93508201013880611201565b80548389018501528794508693909201918101612968565b93607f169361290b565b905034610819576020366003190112610819576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361081d57602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115612a49575b8115612a1f575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612a18565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612a11565b60005b838110612a865750506000910152565b8181015183820152602001612a76565b90602091612aaf81518092818552858086019101612a73565b601f01601f1916010190565b600435906001600160a01b0382168203610c2557565b602435906001600160a01b0382168203610c2557565b6060906003190112610c25576001600160a01b03906004358281168103610c2557916024359081168103610c25579060443590565b9181601f84011215610c255782359167ffffffffffffffff8311610c25576020808501948460051b010111610c2557565b67ffffffffffffffff81116121cb57604052565b610160810190811067ffffffffffffffff8211176121cb57604052565b610100810190811067ffffffffffffffff8211176121cb57604052565b6060810190811067ffffffffffffffff8211176121cb57604052565b6040810190811067ffffffffffffffff8211176121cb57604052565b90601f8019910116810190811067ffffffffffffffff8211176121cb57604052565b67ffffffffffffffff81116121cb57601f01601f191660200190565b604435906001600160801b0382168203610c2557565b15612c2e57565b606460405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b60005260056020526001600160a01b0360406000205416612c94811515612c27565b90565b612cba6107288260005260056020526001600160a01b0360406000205416151590565b60005260076020526001600160a01b036040600020541690565b15612cdb57565b608460405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b90612d69939291612d596126058433612ddb565b612d64838383612eba565b61306f565b15612d7057565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b906001600160a01b038080612def84612c72565b16931691838314938415612e22575b508315612e0c575b50505090565b612e1891929350612c97565b1614388080612e06565b909350600052600860205260406000208260005260205260ff604060002054169238612dfe565b15612e5057565b608460405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b90612ee39291612ec983612c72565b916001600160a01b03948593848094169687911614612e49565b16908115612fd657612ef483613256565b1580612fce575b80612fc5575b612fad5791808492612f2f6000805160206145fb83398151915296602096612f2885612c72565b1614612e49565b60009382855260078652604085206001600160a01b031990818154169055818652600687526040862060001981540190558286526040862060018154019055838652600587528260408720918254161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519580a48152a1565b602483604051906378630aa960e01b82526004820152fd5b50831515612f01565b506001612efb565b608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d1561306a573d9061305082612bf5565b9161305e6040519384612bd3565b82523d6000602084013e565b606090565b91926000929190813b156131f9576020916130df91856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c84523360048501526001600160a01b0380951660248501526044840152608060648401526084830190612a96565b0393165af190829082613199575b5050613173576130fb61303f565b8051908161316e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d82116131f1575b816131b560209383612bd3565b810103126108195751907fffffffff000000000000000000000000000000000000000000000000000000008216820361042357509038806130ed565b3d91506131a8565b5050505050600190565b6040519061321082612b9b565b60006040838281528260208201520152565b9060405161322f81612b9b565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260ff60016040600020015460d81c1690565b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260ff60016040600020015460c81c1690565b6001600160801b0391821690821603919082116132dd57565b634e487b7160e01b600052601160045260246000fd5b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260406000205460f81c90565b600090808252600b6020526040822091825464ffffffffff42818360c81c16116133d25780600186015460a01c1691824210156133bc576133719394955060a01c168091039042036133da565b90828152600b6020526001600160801b03926133978460026040852001541680946134ba565b9283116133a45750501690565b60029350604092508152600b60205220015460801c90565b505050505060026001600160801b039101541690565b505091505090565b670de0b6b3a7640000916000198383099280830292838086109503948086039514613496578285101561345a57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b5050809250156134a4570490565b634e487b7160e01b600052601260045260246000fd5b9091906000198382098382029182808310920391808303921461355857670de0b6b3a7640000908183101561352157947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b80600052600b602052604060002060ff600182015460c81c16600014613590575050600490565b805460f81c6135e9575460a01c64ffffffffff1642106135e3576135b381613324565b90600052600b6020526001600160801b0380600260406000200154169116106000146135de57600190565b600290565b50600090565b5050600390565b80600052600b6020526136096002604060002001613222565b81600052600b602052604060002060ff600182015460c81c1660001461363c57506001600160801b039150602001511690565b5460f81c61364e5750612c9490613324565b612c9491506001600160801b0360408183511692015116906132c4565b906001600160a01b036001541660206001600160a01b036060850151166024604051809481937fdcf844a700000000000000000000000000000000000000000000000000000000835260048301525afa8015613e9657600090613e62575b6136ec91506001600160801b0360408501511690602060e08601510151916144bb565b916001600160801b0383511660c08201519015613e385764ffffffffff815116602082019064ffffffffff82511690818111613df857505064ffffffffff604091511691019064ffffffffff8251169081811015613db857505064ffffffffff8042169151169081811015613d78575050600954926001600160801b038151166040519061377982612b9b565b815260006020820152600060408201526001600160a01b036060840151169060c08401519164ffffffffff6020840151169064ffffffffff604085015116906080870151151560a088015115159364ffffffffff6001600160a01b038a5116975116604051976137e889612b61565b88526020880152604087015260608601526000608086015260a085015260c0840152600060e0840152600161010084015261012083015261014082015284600052600b60205260406000206001600160a01b038251166001600160a01b031982541617815561387f64ffffffffff602084015116829064ffffffffff60a01b1964ffffffffff60a01b83549260a01b169116179055565b604082015181547eff0000000000000000000000000000000000000000000000000000000000006060850151151560f01b169078ffffffffffffffffffffffffffffffffffffffffffffffffff7dffffffffff000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006080880151151560f81b169460c81b1691161717178155600181016001600160a01b0360a0840151166001600160a01b031982541617815561397664ffffffffff60c085015116829064ffffffffff60a01b1964ffffffffff60a01b83549260a01b169116179055565b60e083015181546101008501516101208601517fffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff90921692151560c81b79ff00000000000000000000000000000000000000000000000000169290921791151560d01b7aff0000000000000000000000000000000000000000000000000000169190911790151560d81b7bff00000000000000000000000000000000000000000000000000000016179055610140909101518051602082015160801b6fffffffffffffffffffffffffffffffff199081166001600160801b03928316176002850155926040906003019201511682825416179055600185016009556001600160a01b0360608401511660005260026020526001600160801b0380604060002054168160208501511601166001600160a01b036060850151166000526040600020918254161790556001600160a01b036020830151168015613d3457613afa613af48660005260056020526001600160a01b0360406000205416151590565b1561401c565b613b0385613256565b1580613d2c575b80613d24575b613d0c5760206000805160206145fb83398151915291613b49613af48860005260056020526001600160a01b0360406000205416151590565b806000526006825260406000206001815401905586600052600582526040600020816001600160a01b0319825416179055866040519160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4868152a1613bd96001600160a01b036060840151166001600160801b03808451168160208601511601169030903390613ea2565b6001600160801b0360408201511680613cdd575b506001600160a01b038251167f075861cbceafeb777e8f15f357121b08f6f3adba387d599bb7b5278ca6192df5610160866001600160a01b0360208701511694613cd46001600160a01b03606089015116976080810151151560a0820151151590613c9e6001600160a01b0360e060c08601519501515116956040519788523360208901526040880190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60a086015260c0850152805164ffffffffff90811660e08601526020820151811661010086015260409091015116610120840152565b610140820152a4565b613d06906001600160a01b036060850151166001600160a01b0360e08601515116903390613ea2565b38613bed565b602485604051906378630aa960e01b82526004820152fd5b506000613b10565b506001613b0a565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f9fee269100000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f4c23297000000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b6020823d602011613e8e575b81613e7b60209383612bd3565b8101031261042357506136ec90516136c9565b3d9150613e6e565b6040513d6000823e3d90fd5b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176121cb57613f1192604052613f13565b565b6001600160a01b031690613f73604051613f2c81612bb7565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af1613f6d61303f565b91614067565b805191821591848315613ff8575b505050905015613f8e5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b91938180945001031261081957820151908115158203610423575080388084613f81565b1561402357565b606460405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b919290156140c8575081511561407b575090565b3b156140845790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156140db5750805190602001fd5b6103f79060405191829162461bcd60e51b8352602060048401526024830190612a96565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361413157565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000006020850152166024830152604482015260448152608081019181831067ffffffffffffffff8411176121cb57613f1192604052613f13565b612c94906141ce816135f0565b90600052600b60205260026040600020015460801c906132c4565b91908110156141f95760051b0190565b634e487b7160e01b600052603260045260246000fd5b9190916001600160801b03808094169116019182116132dd57565b929190926001600160801b0380614240836141c1565b1692818116938085116144155750600095838752602092600b84526142b36142736040946002868c20015460801c61420f565b868a52600b86526142ae6002868c20019182906001600160801b036fffffffffffffffffffffffffffffffff1983549260801b169116179055565b613222565b906142ce8186840151169282868183511692015116906132c4565b1611156143e6575b838752600b83526001600160a01b03916142f98683856001858d2001541661415b565b8488526005845282818920541680331415806143dc575b614345575b507ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9495969750519586521693a3565b803b156143d85797807ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9697989960848451809481937f13375c3b0000000000000000000000000000000000000000000000000000000083528c600484015233602484015289891660448401528d60648401525af16143c9575b8897969550614315565b6143d290612b4d565b386143bf565b8880fd5b50803b1515614310565b838752600b835281872060018101600160c81b60ff60c81b1982541617905560ff60f01b1981541690556142d6565b8360649186604051927fa1fb2bbc000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60009080825260056020526001600160a01b038060408420541692833314938415614497575b5050821561448557505090565b9091506144923392612c97565b161490565b60ff9294509060409181526008602052818120338252602052205416913880614478565b9092916144c6613203565b936001600160801b03928381169182156145d25767016345785d8a000080821161459b578085116145645750614510856145018193866134ba565b169460208901958652846134ba565b16918461452760408901948086528287511661420f565b16101561454e57614540849182614549955116906132c4565b915116906132c4565b168252565b634e487b7160e01b600052600160045260246000fd5b84604491604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60449250604051917f47152d6700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b505050505090506040516145e581612b9b565b6000815260006020820152600060408201529056fef8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7"; + hex"60a034620003e757601f196001600160401b03601f62004a433881900382810185168601919084831187841017620003ec57808792606094604052833981010312620003e75783516001600160a01b03928382169291839003620003e7576020918287015196858816809803620003e75760400151948516809503620003e7576200008962000402565b90601c82527f5361626c696572205632204c6f636b7570204c696e656172204e46540000000084830152620000bd62000402565b601181527029a0a116ab1916a627a1a5aaa816a624a760791b8582015230608052600080546001600160a01b031990811688178255600180548216909b178b5596817fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a38351858111620003d35760039485548c81811c91168015620003c8575b89821014620003b45790818684931162000361575b508890868311600114620002f8578492620002ec575b505060001982871b1c1916908b1b1784555b8151948511620002d8576004958654998b8b811c9b168015620002cd575b828c1014620002ba57848b1162000271575b869798999a50819487116001146200020a57505093620001fe575b505082871b92600019911b1c19161790555b600a541617600a5560095560405161462090816200042382396080518161410e0152f35b015191503880620001c8565b8883528183208c9890969594939116915b8282106200025757505085116200023c575b50505050811b019055620001da565b01519060f884600019921b161c19169055388080806200022d565b8484015187558c989096019593840193908101906200021b565b87835281832085880160051c81019b838910620002af575b860160051c019a8c905b8c8110620002a3575050620001ad565b848155018c9062000293565b909b508b9062000289565b634e487b7160e01b835260228852602483fd5b9a607f169a6200019b565b634e487b7160e01b81526041600452602490fd5b0151905038806200016b565b908c8e9416918886528a862092865b8c82821062000341575050841162000328575b505050811b0184556200017d565b015160001983891b60f8161c191690553880806200031a565b91929395968291958786015181550195019301908f959493929162000307565b9091508684528884208680850160051c8201928b8610620003aa575b918f91869594930160051c01915b8281106200039b57505062000155565b8681558594508f91016200038b565b925081926200037d565b634e487b7160e01b84526022600452602484fd5b90607f169062000140565b634e487b7160e01b82526041600452602482fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620003ec5760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a7146129a45750806306fdde03146128e2578063081812fc146128c3578063095ea7b3146127345780631400ecec146126945780631c1cdd4c1461262f5780631e99d5691461261157806323b872dd146125e757806339a73c03146125a657806340e58ee514612202578063425d30dd146121e357806342842e0e1461219357806342966c681461203b5780634857501f14611fb15780634869e12d14611f765780635fe3b56714611f4f5780636352211e14611f1f5780636d0cee7514611ec957806370a0823114611e2057806375829def14611d8d578063780a82c814611d3d5780637cad6cd114611c6c5780637de6b1db14611a935780638659c2701461167f578063894e9a0d1461142b5780638bad38dd146113ae5780638f69b993146113125780639067b677146112bf57806395d89b41146111b257806396ce143114611093578063a22cb46514610fc2578063a2ffb89714610d84578063a6202bf214610c7e578063a80fc07114610c2c578063ab167ccc14610af3578063ad35efd414610a91578063b256456914610a72578063b88d4fde146109e1578063b8a3be66146109ac578063b971302a1461095d578063bc063e1a1461093a578063bc2be1be146108ea578063c156a11d1461082f578063c87b56dd146106f1578063cc364f4814610643578063d4dbd20b146105f1578063d511609f146105a5578063d975dfed14610559578063e985e9c514610504578063ea5ead19146104de578063eac8f5b814610475578063f590c1761461044c578063f851a440146104265763fdd46d601461027357600080fd5b346104235760603660031901126104235760043561028f612ad3565b610297612c13565b906102a0614104565b6102a983613291565b61040b576102cd83600052600b6020526001600160a01b0360406000205416331490565b15806103fb575b6103d8576102f883600052600b6020526001600160a01b0360406000205416331490565b806103b6575b610389576001600160a01b0381161561035f576001600160801b03821615610347579161033d602092600080516020614600833981519152948361422f565b604051908152a180f35b6024836040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b826001600160a01b0360649260405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b5082845260056020526001600160a01b038060408620541690821614156102fe565b60405163216caf0d60e01b815260048101849052336024820152604490fd5b0390fd5b5061040583614457565b156102d4565b60248360405190634a5541ef60e01b82526004820152fd5b80fd5b50346104235780600319360112610423576001600160a01b036020915416604051908152f35b503461042357602036600319011261042357602061046b6004356132f7565b6040519015158152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760016040836001600160a01b039360209552600b855220015416604051908152f35b6024906040519062b8e7e760e51b82526004820152fd5b5034610423576040366003190112610423576004356104fb612ad3565b610297826141c6565b50346104235760403660031901126104235761051e612abd565b6040610528612ad3565b926001600160a01b0380931681526008602052209116600052602052602060ff604060002054166040519015158152f35b50346104235760203660031901126104235760ff6001604060043593848152600b60205220015460d01c16156104c7576105946020916141c6565b6001600160801b0360405191168152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408260029260209452600b845220015460801c604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760036040836001600160801b039360209552600b855220015416604051908152f35b503461042357602036600319011261042357600435610660613207565b50808252600b60205260ff600160408420015460d01c16156104c7578160409160609352600b60205220600181549164ffffffffff918291015460a01c1690604051926106ac84612b9d565b818160a01c16845260c81c16602083015260408201526106ef60405180926040908164ffffffffff91828151168552826020820151166020860152015116910152565bf35b50346104235760208060031936011261081b5760043561072f61072a8260005260056020526001600160a01b0360406000205416151590565b612c29565b826001600160a01b03600a5416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa92831561082357809361079e575b505061079a604051928284938452830190612a98565b0390f35b909192503d8082843e6107b18184612bd5565b820191838184031261081b5780519067ffffffffffffffff821161081f570182601f8201121561081b578051916107e783612bf7565b936107f56040519586612bd5565b83855285848401011161042357509061081391848085019101612a75565b903880610784565b5080fd5b8280fd5b604051903d90823e3d90fd5b50346104235760403660031901126104235760043561084c612ad3565b610854614104565b818352600b60205260ff600160408520015460d01c16156108d35781835260056020526001600160a01b036040842054168033036103d8579161033d81602093600080516020614600833981519152956108ad836141c6565b6001600160801b0381166108c2575b50612ebc565b6108cd90828561422f565b386108bc565b6024826040519062b8e7e760e51b82526004820152fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408264ffffffffff9260209452600b8452205460a01c16604051908152f35b5034610423578060031936011261042357602060405167016345785d8a00008152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c7576040826001600160a01b039260209452600b8452205416604051908152f35b50346104235760203660031901126104235760ff600160406020936004358152600b855220015460d01c166040519015158152f35b5034610423576080366003190112610423576109fb612abd565b610a03612ad3565b906064359067ffffffffffffffff8211610a6e5736602383011215610a6e5781600401359284610a3285612bf7565b93610a406040519586612bd5565b858552366024878301011161081b5785610a6b96602460209301838801378501015260443591612d47565b80f35b8380fd5b503461042357602036600319011261042357602061046b60043561325a565b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c757610aca9061356d565b604051906005811015610adf57602092508152f35b602483634e487b7160e01b81526021600452fd5b50346104235761014036600319011261042357610b0e614104565b610b16613207565b9064ffffffffff80421680845260c4358281168103610c275781018216602085015260e435908183168203610c275701166040830152606435916001600160a01b03918284168094036104235750608435801515809103610c275760a43590811515809203610c275760243594848616809603610c275760043595858716809703610c2757604435906001600160801b038216809203610c275760405197610bbd89612b80565b8852602088015260408701526060860152608085015260a084015260c0830152604061010319360112610c275760405191610bf783612bb9565b610104359182168203610c275782610c1f9260209452610124358482015260e082015261366f565b604051908152f35b600080fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760026040836001600160801b039360209552600b855220015416604051908152f35b503461042357602036600319011261042357610c98612abd565b6001600160a01b0380835416338103610d5b575081169081835260026020526001600160801b03604084205416908115610d2a5781610cfb918486526002602052604086206fffffffffffffffffffffffffffffffff1981541690553390614160565b6040519081527fca7a4a65a94ed2f37538814e00e1cd4c41a78261561e3f3794592f11409cf5af60203392a380f35b602483604051907f8410168c0000000000000000000000000000000000000000000000000000000082526004820152fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b50346104235760603660031901126104235767ffffffffffffffff60043581811161081f57610db7903690600401612b1e565b91610dc0612ad3565b90604435908111610fbe57610dd9903690600401612b1e565b9093610de3614104565b818103610f8857855b818110610df7578680f35b610e028183876141ee565b35610e0e8285896141ee565b356001600160801b0381168103610c2757610e27614104565b610e3082613291565b610f7057610e5482600052600b6020526001600160a01b0360406000205416331490565b1580610f60575b610f4157610e7f82600052600b6020526001600160a01b0360406000205416331490565b80610f19575b610eec576001600160a01b0386161561035f576001600160801b03811615610ed457602082610ec760008051602061460083398151915293896001979661422f565b604051908152a101610dec565b6024826040519063d2aabcd960e01b82526004820152fd5b6064826001600160a01b038860405192632dcbf6b960e11b84526004840152336024840152166044820152fd5b5081895260056020526001600160a01b0360408a2054166001600160a01b0387161415610e85565b60405163216caf0d60e01b815260048101839052336024820152604490fd5b50610f6a82614457565b15610e5b565b60248260405190634a5541ef60e01b82526004820152fd5b604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8480fd5b503461042357604036600319011261042357610fdc612abd565b60243590811515809203610c27576001600160a01b03169081331461104f5733835260086020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b606460405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b503461042357610160366003190112610423576110ae614104565b604051906110bb82612b80565b6110c3612abd565b82526110cd612ad3565b60208301526110da612c13565b60408301526001600160a01b03906064358281168103610c275760608401526084358015158103610c2757608084015260a4358015158103610c275760a084015260603660c3190112610423575060405161113481612b9d565b64ffffffffff60c4358181168103610c2757825260e4358181168103610c27576020830152610104359081168103610c2757604082015260c0830152604061012319360112610c27576040519161118a83612bb9565b610124359182168203610c275782610c1f9260209452610144358482015260e082015261366f565b5034610423578060031936011261042357604051908060045491600183811c928185169485156112b5575b60209586861081146112a15785885287949392918790821561127f575050600114611225575b505061121192500383612bd5565b61079a604051928284938452830190612a98565b90859250600482527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b85831061126757505061121193508201013880611203565b8054838901850152879450869390920191810161124f565b925093505061121194915060ff191682840152151560051b8201013880611203565b602483634e487b7160e01b81526022600452fd5b93607f16936111dd565b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c757600160408364ffffffffff9360209552600b855220015460a01c16604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75761134b9061356d565b906005821015908161138c57600283149182156113a0575b8215611377575b6020836040519015158152f35b90915061138c5750600460209114388061136a565b80634e487b7160e01b602492526021600452fd5b506003831491506000611363565b5034610423576020366003190112610423576004356001600160a01b039081811680910361081f5781835416338103610d5b575060015491816001600160a01b03198416176001556040519216825260208201527fdcb09aef4bf01068924ccce937981cbe59d25ba08380cf941aaaea4e4bd3960d60403392a280f35b50346104235760203660031901126104235760405161144981612b63565b8181528160208201528160408201528160608201528160808201528160a08201528160c08201528160e0820152816101008201528161012082015261014061148f613207565b9101526004358152600b60205260ff600160408320015460d01c1615611667576004358152600b602052604081206115686002604051926114cf84612b63565b80546001600160a01b038116855264ffffffffff8160a01c16602086015264ffffffffff8160c81c16604086015260ff8160f01c161515606086015260f81c1515608085015260ff60018201546001600160a01b03811660a087015264ffffffffff8160a01c1660c0870152818160c81c16151560e0870152818160d01c16151561010087015260d81c16151561012085015201613226565b61014082015261157960043561356d565b6005811015610adf579160026101a0931461165c575b506106ef610140604051926001600160a01b03815116845264ffffffffff602082015116602085015264ffffffffff60408201511660408501526060810151151560608501526080810151151560808501526001600160a01b0360a08201511660a085015264ffffffffff60c08201511660c085015260e0810151151560e0850152610100810151151561010085015261012081015115156101208501520151610140830190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60608201523861158f565b602460405162b8e7e760e51b81526004356004820152fd5b503461042357602090816003193601126104235760043567ffffffffffffffff811161081b576116b483913690600401612b1e565b906116bd614104565b83915b8083106116cb578480f35b6116da838284979596976141ee565b35936116e4614104565b6116ed85613291565b1561170a5760248560405190634a5541ef60e01b82526004820152fd5b90919293611717816132f7565b611a7b5761173b81600052600b6020526001600160a01b0360406000205416331490565b1580611a5d575b611a3d5761174f81613328565b818652600b9081885261176760026040892001613226565b6001600160801b0391828251168382161015611a2557848952838a5260ff60408a205460f01c1615611a0d579282826117b986838e6117af8f9a829a60409e9d9a51166132c8565b94015116906132c8565b84875283865288872091611848835494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871617855560038185169586156119f3575b0190831699818b6fffffffffffffffffffffffffffffffff19819454161790556001600160a01b0380971696879160058c52818f82205416998c5260019e8f9120015416614160565b33840361193157843b6118aa575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd260406000805160206146008339815191529786935b825191825288820152a4604051908152a10191909392936116c0565b90919293809596503b1561192d576040516372eba20360e01b8152600481018790526001600160a01b03851660248201526001600160801b039182166044820152911660648201528b94939291908b90818160848183895af115611856576119189192939597949650612b4f565b61192957918a939194928a8d611856565b8980fd5b8b80fd5b833b611974575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd2604060008051602061460083398151915297869361188e565b90919280949596503b1561192d576040516372eba20360e01b8152600481018790526001600160a01b03861660248201526001600160801b039182166044820152911660648201528b94939291908b90818160848183885af115611938576119e29192939597949650612b4f565b61192957918a939194928a8d611938565b60018101600160c81b60ff60c81b198254161790556117ff565b602485604051906339c6dc7360e21b82526004820152fd5b602485604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b50808552600586526001600160a01b03604086205416331415611742565b6024906040519063fe19f19f60e01b82526004820152fd5b50346104235760208060031936011261081b5760043590611ab2614104565b818352600b815260ff600160408520015460d01c16156108d357611ad58261356d565b6005811015611c585760048103611afe5760248360405190634a5541ef60e01b82526004820152fd5b60038103611b1e576024836040519063fe19f19f60e01b82526004820152fd5b600214611c4057611b4582600052600b6020526001600160a01b0360406000205416331490565b15610f4157818352600b815260ff604084205460f01c1615611c2857818352600b81526040832060ff60f01b19815416905560058152826001600160a01b03604082205416803b611bd1575b505060405160008051602061460083398151915292807f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8680a28152a180f35b803b1561081b578180916024604051809481937f341a0bd90000000000000000000000000000000000000000000000000000000083528960048401525af115611b9157611c1d90612b4f565b61081f578238611b91565b602482604051906339c6dc7360e21b82526004820152fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b5034610423576020366003190112610423576004356001600160a01b039081811680910361081f5781835416338103610d5b5750600a5491816001600160a01b0319841617600a556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26009546000198101908111611d295760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c75760408264ffffffffff9260209452600b8452205460c81c16604051908152f35b503461042357602036600319011261042357611da7612abd565b9080546001600160a01b0380821693338503611df9576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b5034610423576020366003190112610423576001600160a01b03611e42612abd565b168015611e5f578160409160209352600683522054604051908152f35b608460405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b5034610423576020366003190112610423576001600160a01b036040602092600435611f0e61072a8260005260056020526001600160a01b0360406000205416151590565b815260058452205416604051908152f35b5034610423576020366003190112610423576020611f3e600435612c74565b6001600160a01b0360405191168152f35b503461042357806003193601126104235760206001600160a01b0360015416604051908152f35b50346104235760203660031901126104235760ff6001604060043593848152600b60205220015460d01c16156104c7576105946020916135f4565b50346104235760203660031901126104235760043590818152600b60205260ff600160408320015460d01c16156108d35780611fec8361356d565b9260058410156120275760026020940361200d575b50506040519015158152f35b8152600b8352604090205460f01c60ff1690503880612001565b602482634e487b7160e01b81526021600452fd5b503461042357602036600319011261042357600435612058614104565b61206181613291565b156121625761206f81614457565b15611a3d5761207d81612c74565b6120868261325a565b15908161215a575b81612147575b5061212f576020816120b460008051602061460083398151915293612c74565b90808552600783526001600160a01b0360408620926001600160a01b03199384815416905516918286526006845260408620600019815401905581865260058452604086209081541690558085604051937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a48152a180f35b602490604051906378630aa960e01b82526004820152fd5b6001600160a01b03915016151538612094565b83915061208e565b602490604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b5034610423576121a236612ae9565b60405191602083019383851067ffffffffffffffff8611176121cd57610a6b94604052858452612d47565b634e487b7160e01b600052604160045260246000fd5b503461042357602036600319011261042357602061046b600435613291565b50346104235760208060031936011261081b5760043590612221614104565b61222a82613291565b156122475760248260405190634a5541ef60e01b82526004820152fd5b612250826132f7565b61258e5761227482600052600b6020526001600160a01b0360406000205416331490565b1580612570575b610f415761228882613328565b91808452600b825261229f60026040862001613226565b6001600160801b039384825116858216101561255857828652600b845260ff604087205460f01c161561254057816122e38287876117af60409683839951166132c8565b848852600b845282882091612372835498600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b161785558a6003828616968715612526575b019184169a828c6fffffffffffffffffffffffffffffffff198195541617905560016001600160a01b0380921698899360058c52600b8483832054169c5220015416614160565b33840361243d57908891853b6123d0575b5050507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd260406000805160206146008339815191529786935b825191825288820152a4604051908152a180f35b853b1561081f576040516372eba20360e01b8152600481018890526001600160a01b03861660248201526001600160801b03918216604482015291166064820152818160848183895af1612425575b80612383565b61242e90612b4f565b61243957863861241f565b8680fd5b83989792983b612485575b50507f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd26040859260008051602061460083398151915298996123bc565b833b15612522576040516372eba20360e01b8152600481018790526001600160a01b03861660248201526001600160801b03918216604482015291166064820152868160848183875af16124da575b80612448565b60408592600080516020614600833981519152986125187f2971bd77136e1a620a6b1eb4ad5edd190e9fd391b26bfc5dea50b882fc6b9fd294612b4f565b98509250506124d4565b8780fd5b60018101600160c81b60ff60c81b1982541617905561232b565b602483604051906339c6dc7360e21b82526004820152fd5b602483604051906322cad1af60e11b82526004820152fd5b50818352600581526001600160a01b0360408420541633141561227b565b6024826040519063fe19f19f60e01b82526004820152fd5b5034610423576020366003190112610423576001600160801b0360406020926001600160a01b036125d5612abd565b16815260028452205416604051908152f35b503461042357610a6b6125f936612ae9565b9161260c6126078433612ddd565b612cd6565b612ebc565b50346104235780600319360112610423576020600954604051908152f35b503461042357602036600319011261042357600435808252600b60205260ff600160408420015460d01c16156104c7576126689061356d565b90600582101561138c5760208215838115612689575b506040519015158152f35b60019150148261267e565b50346104235760203660031901126104235760043590818152600b60205260ff600160408320015460d01c16156108d357602091604082828152600b85522060ff815460f01c1680612722575b6126f9575b50506001600160801b0360405191168152f35b61271b92506001600160801b0360026127159201541691613328565b906132c8565b38806126e6565b5060ff600182015460c81c16156126e1565b50346104235760403660031901126104235761274e612abd565b602435906001600160a01b03808061276585612c74565b1692169180831461285957803314908115612838575b50156127ce57828452600760205260408420826001600160a01b03198254161790556127a683612c74565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b608460405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050845260086020526040842033855260205260ff6040852054163861277b565b608460405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b5034610423576020366003190112610423576020611f3e600435612c99565b5034610423578060031936011261042357604051908060035491600183811c9281851694851561299a575b60209586861081146112a15785885287949392918790821561127f57505060011461294057505061121192500383612bd5565b90859250600382527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b85831061298257505061121193508201013880611203565b8054838901850152879450869390920191810161296a565b93607f169361290d565b90503461081b57602036600319011261081b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361081f57602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115612a4b575b8115612a21575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612a1a565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612a13565b60005b838110612a885750506000910152565b8181015183820152602001612a78565b90602091612ab181518092818552858086019101612a75565b601f01601f1916010190565b600435906001600160a01b0382168203610c2757565b602435906001600160a01b0382168203610c2757565b6060906003190112610c27576001600160a01b03906004358281168103610c2757916024359081168103610c27579060443590565b9181601f84011215610c275782359167ffffffffffffffff8311610c27576020808501948460051b010111610c2757565b67ffffffffffffffff81116121cd57604052565b610160810190811067ffffffffffffffff8211176121cd57604052565b610100810190811067ffffffffffffffff8211176121cd57604052565b6060810190811067ffffffffffffffff8211176121cd57604052565b6040810190811067ffffffffffffffff8211176121cd57604052565b90601f8019910116810190811067ffffffffffffffff8211176121cd57604052565b67ffffffffffffffff81116121cd57601f01601f191660200190565b604435906001600160801b0382168203610c2757565b15612c3057565b606460405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b60005260056020526001600160a01b0360406000205416612c96811515612c29565b90565b612cbc61072a8260005260056020526001600160a01b0360406000205416151590565b60005260076020526001600160a01b036040600020541690565b15612cdd57565b608460405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b90612d6b939291612d5b6126078433612ddd565b612d66838383612ebc565b613075565b15612d7257565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b906001600160a01b038080612df184612c74565b16931691838314938415612e24575b508315612e0e575b50505090565b612e1a91929350612c99565b1614388080612e08565b909350600052600860205260406000208260005260205260ff604060002054169238612e00565b15612e5257565b608460405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b90612ee59291612ecb83612c74565b916001600160a01b03948593848094169687911614612e4b565b1690811580612fdc57612ef78461325a565b159081612fd3575b5080612fca575b612fb25791808492612f3460008051602061460083398151915296602096612f2d85612c74565b1614612e4b565b60009382855260078652604085206001600160a01b031990818154169055818652600687526040862060001981540190558286526040862060018154019055838652600587528260408720918254161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519580a48152a1565b602483604051906378630aa960e01b82526004820152fd5b50831515612f06565b90501538612eff565b608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d15613070573d9061305682612bf7565b916130646040519384612bd5565b82523d6000602084013e565b606090565b9290803b156131fe576130df916020916001600160a01b0394604051809581948293897f150b7a02000000000000000000000000000000000000000000000000000000009b8c86523360048701521660248501526044840152608060648401526084830190612a98565b03916000968791165af19082908261319e575b505061317857613100613045565b805190816131735760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d82116131f6575b816131ba60209383612bd5565b8101031261081b5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361042357509038806130f2565b3d91506131ad565b50505050600190565b6040519061321482612b9d565b60006040838281528260208201520152565b9060405161323381612b9d565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260ff60016040600020015460d81c1690565b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260ff60016040600020015460c81c1690565b6001600160801b0391821690821603919082116132e157565b634e487b7160e01b600052601160045260246000fd5b80600052600b60205260ff60016040600020015460d01c16156104c757600052600b60205260406000205460f81c90565b600090808252600b6020526040822091825464ffffffffff42818360c81c16116133d65780600186015460a01c1691824210156133c0576133759394955060a01c168091039042036133de565b90828152600b6020526001600160801b039261339b8460026040852001541680946134be565b9283116133a85750501690565b60029350604092508152600b60205220015460801c90565b505050505060026001600160801b039101541690565b505091505090565b670de0b6b3a764000091600019838309928083029283808610950394808603951461349a578285101561345e57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b5050809250156134a8570490565b634e487b7160e01b600052601260045260246000fd5b9091906000198382098382029182808310920391808303921461355c57670de0b6b3a7640000908183101561352557947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b80600052600b602052604060002060ff600182015460c81c16600014613594575050600490565b805460f81c6135ed575460a01c64ffffffffff1642106135e7576135b781613328565b90600052600b6020526001600160801b0380600260406000200154169116106000146135e257600190565b600290565b50600090565b5050600390565b80600052600b60205261360d6002604060002001613226565b81600052600b602052604060002060ff600182015460c81c1660001461364057506001600160801b039150602001511690565b5460f81c6136525750612c9690613328565b612c9691506001600160801b0360408183511692015116906132c8565b906001600160a01b036001541660206001600160a01b036060850151166024604051809481937fdcf844a700000000000000000000000000000000000000000000000000000000835260048301525afa8015613e9b57600090613e67575b6136f091506001600160801b0360408501511690602060e08601510151916144c0565b916001600160801b0383511660c08201519015613e3d5764ffffffffff815116602082019064ffffffffff82511690818111613dfd57505064ffffffffff604091511691019064ffffffffff8251169081811015613dbd57505064ffffffffff8042169151169081811015613d7d575050600954926001600160801b038151166040519061377d82612b9d565b815260006020820152600060408201526001600160a01b036060840151169060c08401519164ffffffffff6020840151169064ffffffffff604085015116906080870151151560a088015115159364ffffffffff6001600160a01b038a5116975116604051976137ec89612b63565b88526020880152604087015260608601526000608086015260a085015260c0840152600060e0840152600161010084015261012083015261014082015284600052600b60205260406000206001600160a01b038251166001600160a01b031982541617815561388364ffffffffff602084015116829064ffffffffff60a01b1964ffffffffff60a01b83549260a01b169116179055565b604082015181547eff0000000000000000000000000000000000000000000000000000000000006060850151151560f01b169078ffffffffffffffffffffffffffffffffffffffffffffffffff7dffffffffff000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006080880151151560f81b169460c81b1691161717178155600181016001600160a01b0360a0840151166001600160a01b031982541617815561397a64ffffffffff60c085015116829064ffffffffff60a01b1964ffffffffff60a01b83549260a01b169116179055565b60e083015181546101008501516101208601517fffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff90921692151560c81b79ff00000000000000000000000000000000000000000000000000169290921791151560d01b7aff0000000000000000000000000000000000000000000000000000169190911790151560d81b7bff00000000000000000000000000000000000000000000000000000016179055610140909101518051602082015160801b6fffffffffffffffffffffffffffffffff199081166001600160801b03928316176002850155926040906003019201511682825416179055600185016009556001600160a01b0360608401511660005260026020526001600160801b0380604060002054168160208501511601166001600160a01b036060850151166000526040600020918254161790556001600160a01b036020830151168015613d3957613afe613af88660005260056020526001600160a01b0360406000205416151590565b15614021565b613b078561325a565b1580613d30575b80613d28575b613d1057602060008051602061460083398151915291613b4d613af88860005260056020526001600160a01b0360406000205416151590565b806000526006825260406000206001815401905586600052600582526040600020816001600160a01b0319825416179055866040519160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4868152a1613bdd6001600160a01b036060840151166001600160801b03808451168160208601511601169030903390613ea7565b6001600160801b0360408201511680613ce1575b506001600160a01b038251167f075861cbceafeb777e8f15f357121b08f6f3adba387d599bb7b5278ca6192df5610160866001600160a01b0360208701511694613cd86001600160a01b03606089015116976080810151151560a0820151151590613ca26001600160a01b0360e060c08601519501515116956040519788523360208901526040880190604090816001600160801b0391828151168552826020820151166020860152015116910152565b60a086015260c0850152805164ffffffffff90811660e08601526020820151811661010086015260409091015116610120840152565b610140820152a4565b613d0a906001600160a01b036060850151166001600160a01b0360e08601515116903390613ea7565b38613bf1565b602485604051906378630aa960e01b82526004820152fd5b506000613b14565b50801515613b0e565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f9fee269100000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f4c23297000000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b6020823d602011613e93575b81613e8060209383612bd5565b8101031261042357506136f090516136cd565b3d9150613e73565b6040513d6000823e3d90fd5b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176121cd57613f1692604052613f18565b565b6001600160a01b031690613f78604051613f3181612bb9565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af1613f72613045565b9161406c565b805191821591848315613ffd575b505050905015613f935750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b91938180945001031261081b57820151908115158203610423575080388084613f86565b1561402857565b606460405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b919290156140cd5750815115614080575090565b3b156140895790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156140e05750805190602001fd5b6103f79060405191829162461bcd60e51b8352602060048401526024830190612a98565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361413657565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000006020850152166024830152604482015260448152608081019181831067ffffffffffffffff8411176121cd57613f1692604052613f18565b612c96906141d3816135f4565b90600052600b60205260026040600020015460801c906132c8565b91908110156141fe5760051b0190565b634e487b7160e01b600052603260045260246000fd5b9190916001600160801b03808094169116019182116132e157565b929190926001600160801b0380614245836141c6565b16928181169380851161441a5750600095838752602092600b84526142b86142786040946002868c20015460801c614214565b868a52600b86526142b36002868c20019182906001600160801b036fffffffffffffffffffffffffffffffff1983549260801b169116179055565b613226565b906142d38186840151169282868183511692015116906132c8565b1611156143eb575b838752600b83526001600160a01b03916142fe8683856001858d20015416614160565b8488526005845282818920541680331415806143e1575b61434a575b507ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9495969750519586521693a3565b803b156143dd5797807ffa54f9f9bdcdd28778cbb9f78490df6691cc4e2729588e10f4cc0a26c465686a9697989960848451809481937f13375c3b0000000000000000000000000000000000000000000000000000000083528c600484015233602484015289891660448401528d60648401525af16143ce575b889796955061431a565b6143d790612b4f565b386143c4565b8880fd5b50803b1515614315565b838752600b835281872060018101600160c81b60ff60c81b1982541617905560ff60f01b1981541690556142db565b8360649186604051927fa1fb2bbc000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60009080825260056020526001600160a01b03806040842054169283331493841561449c575b5050821561448a57505090565b9091506144973392612c99565b161490565b60ff929450906040918152600860205281812033825260205220541691388061447d565b9092916144cb613207565b936001600160801b03928381169182156145d75767016345785d8a00008082116145a0578085116145695750614515856145068193866134be565b169460208901958652846134be565b16918461452c604089019480865282875116614214565b1610156145535761454584918261454e955116906132c8565b915116906132c8565b168252565b634e487b7160e01b600052600160045260246000fd5b84604491604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60449250604051917f47152d6700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b505050505090506040516145ea81612b9d565b6000815260006020820152600060408201529056fef8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7"; bytes public constant BYTECODE_NFT_DESCRIPTOR = - hex"6080806040523461001757615da890816200001d8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63e9dc63751461002757600080fd5b346142f35760403660031901126142f3576001600160a01b0360043516600435036142f357610056608061486b565b60006080819052606060a081905260c0819052610100819052610120819052610140819052610160829052610180919091526101a0526004356001600160a01b031660e08190526100a690614c55565b6101005260e0516040517feac8f5b80000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa908115614300576000916147da575b506001600160a01b03610116911680608052615665565b60a05260e0516040517fad35efd40000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143005760009061479d575b6101779150615885565b6101205260e0516040517f4869e12d0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143005760249160009161477e575b506fffffffffffffffffffffffffffffffff81166101605260e0516040517fa80fc071000000000000000000000000000000000000000000000000000000008152833560048201529260209184919082906001600160a01b03165afa9182156143005760009261474d575b506fffffffffffffffffffffffffffffffff821615614737576fffffffffffffffffffffffffffffffff9182169082166127100282160416610180526102846004356153c3565b610120608001526040514660208201526bffffffffffffffffffffffff1960043560601b16604082015260243560548201526054815280608081011067ffffffffffffffff60808301111761430c57608081016040526020815191012061041b602963ffffffff61032b6103048261016861ffff8860101c160616614b05565b91601e604660ff6103218460146050848d60081c16060116614b05565b9816060116614b05565b6040519485927f68736c2800000000000000000000000000000000000000000000000000000000602085015261036b815180926020602488019101614823565b83017f2c0000000000000000000000000000000000000000000000000000000000000060248201526103a7825180936020602585019101614823565b7f252c000000000000000000000000000000000000000000000000000000000000602583830101526103e58351809460206027868601019101614823565b01017f252900000000000000000000000000000000000000000000000000000000000060278201520360098101845201826148dc565b61042f6001600160a01b0360805116614c55565b60a05160e0516040517fbc2be1be0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa801561430057602491600091614718575b5060206001600160a01b0360606080015116604051938480927f9067b677000000000000000000000000000000000000000000000000000000008252823560048301525afa8015614300576104f1926000916146e9575b5064ffffffffff80911691166151d1565b61010051610180516105786021610515606461050e818606615740565b9404614b05565b604051938161052e869351809260208087019101614823565b82016105438251809360208085019101614823565b017f250000000000000000000000000000000000000000000000000000000000000060208201520360018101845201826148dc565b610100608001519060a060800151936105bf6fffffffffffffffffffffffffffffffff60e0608001511660ff6105b86001600160a01b03608051166155d8565b1690614e85565b956101206080015197604051996105d58b61486b565b8a5260208a015260408901526060880152608087015260a086015260c085015260e0840152610100830152610120820152604051806101c081011067ffffffffffffffff6101c08301111761430c576101c081016040526060815260006020820152606060408201526000606082015260006080820152606060a0820152600060c0820152600060e08201526060610100820152600061012082015260006101408201526060610160820152600061018082015260006101a082015260808201516106a660a0840151845190615a76565b906109b361015c604051926106ba846148c0565b600884527f50726f677265737300000000000000000000000000000000000000000000000060208501526107236040516106f381614888565b60009052855160208701207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701490565b156146e1576090945b61073586614b05565b916040519586938493661e339034b21e9160c91b60208601526109818351958692610767846027840160208901614823565b6d11103334b6361e9111b33333111f60911b602785840101526c1e3932b1ba103bb4b23a341e9160991b603585840101526107ae8551809660206042888701019101614823565b7f22206865696768743d22313030222066696c6c2d6f7061636974793d222e3033828501860160428101919091527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e88201528651966108b491889160f990910190602001614823565b661e17ba32bc3a1f60c91b8285018601870160f98101919091527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b61014082015287519761094f91899161015190910190602001614823565b661e17ba32bc3a1f60c91b6101518888888887010101010152602061015888888885519c8d9701010101019101614823565b631e17b39f60e11b90860190910190910190910190910161015881019190915281900361013c810190915201826148dc565b60a083015260c0820152602860e0830151604051906109d182614888565b60008252610c7761015c604051926109e8846148c0565b600684527f53746174757300000000000000000000000000000000000000000000000000006020850152610a1b84615cb6565b610a2482615d33565b808211156146d95750945b610a3a878701614b05565b91604051958693661e339034b21e9160c91b60208601528151610a64816027880160208601614823565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610aa7825180936020604285019101614823565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610ba382518093602060f985019101614823565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610c3282518093602061015185019101614823565b01661e17ba32bc3a1f60c91b610151820152610c5982518093602061015885019101614823565b01631e17b39f60e11b6101588201520361013c8101845201826148dc565b61010084015201610120820152602861010083015160405190610c9982614888565b60008252610ce361015c60405192610cb0846148c0565b600884527f53747265616d65640000000000000000000000000000000000000000000000006020850152610a1b84615cb6565b6101608401520161018082015261102660608301516030604051610d0681614888565b60008152610fad61015c60405194610d1d866148c0565b600886527f4475726174696f6e0000000000000000000000000000000000000000000000006020870152610d5086615cb6565b610d5982615d33565b808211156146d15750935b610d7060288601614b05565b91604051978893661e339034b21e9160c91b60208601528151610d9a816027880160208601614823565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610ddd825180936020604285019101614823565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610ed982518093602060f985019101614823565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610f6882518093602061015185019101614823565b01661e17ba32bc3a1f60c91b610151820152610f8f82518093602061015885019101614823565b01631e17b39f60e11b6101588201520361013c8101865201846148dc565b8260408601526028810160608601526101808501519060c0860151809161012088015192839185010101605881016020890152605719906103e8030160011c8060e0890152016010810161014088015201602081016101a08701520101608084015260a083015161010084015161016085015191614e1c565b8152604051908161010081011067ffffffffffffffff6101008401111761430c57610100820160405260c782527f3c726563742077696474683d223130302522206865696768743d22313030252260208301527f2066696c7465723d2275726c28234e6f69736529222f3e3c7265637420783d2260408301527f37302220793d223730222077696474683d2238363022206865696768743d223860608301527f3630222066696c6c3d2223666666222066696c6c2d6f7061636974793d222e3060808301527f33222072783d223435222072793d22343522207374726f6b653d22236666662260a08301527f207374726f6b652d6f7061636974793d222e3122207374726f6b652d7769647460c08301527f683d2234222f3e0000000000000000000000000000000000000000000000000060e083015282519160e084015191805194604051611175816148a4565b603381527f3c636972636c652069643d22476c6f772220723d22353030222066696c6c3d2260208201527f75726c282352616469616c476c6f7729222f3e000000000000000000000000006040820152604051966111d28861486b565b61011c88527f3c66696c7465722069643d224e6f697365223e3c6665466c6f6f6420783d223060208901527f2220793d2230222077696474683d223130302522206865696768743d2231303060408901527f252220666c6f6f642d636f6c6f723d2268736c283233302c3231252c3131252960608901527f2220666c6f6f642d6f7061636974793d22312220726573756c743d22666c6f6f60808901527f6446696c6c222f3e3c666554757262756c656e6365206261736546726571756560a08901527f6e63793d222e3422206e756d4f6374617665733d22332220726573756c743d2260c08901527f4e6f6973652220747970653d226672616374616c4e6f697365222f3e3c66654260e08901527f6c656e6420696e3d224e6f6973652220696e323d22666c6f6f6446696c6c22206101008901527f6d6f64653d22736f66742d6c69676874222f3e3c2f66696c7465723e0000000061012089015260405197886103a081011067ffffffffffffffff6103a08b01111761430c576103a0890160405261037b89527f3c706174682069643d224c6f676f222066696c6c3d2223666666222066696c6c60208a01527f2d6f7061636974793d222e312220643d226d3133332e3535392c3132342e303360408a01527f34632d2e3031332c322e3431322d312e3035392c342e3834382d322e3932332c60608a01527f362e3430322d322e3535382c312e3831392d352e3136382c332e3433392d372e60808a01527f3838382c342e3939362d31342e34342c382e3236322d33312e3034372c31322e60a08a01527f3536352d34372e3637342c31322e3536392d382e3835382e3033362d31372e3860c08a01527f33382d312e3237322d32362e3332382d332e3636332d392e3830362d322e373660e08a01527f362d31392e3038372d372e3131332d32372e3536322d31322e3737382d31332e6101008a01527f3834322d382e3032352c392e3436382d32382e3630362c31362e3135332d33356101208a01527f2e323635683063322e3033352d312e3833382c342e3235322d332e3534362c366101408a01527f2e3436332d352e323234683063362e3432392d352e3635352c31362e3231382d6101608a01527f322e3833352c32302e3335382c342e31372c342e3134332c352e3035372c382e6101808a01527f3831362c392e3634392c31332e39322c31332e373334682e30333763352e37336101a08a01527f362c362e3436312c31352e3335372d322e3235332c392e33382d382e34382c306101c08a01527f2c302d332e3531352d332e3531352d332e3531352d332e3531352d31312e34396101e08a01527f2d31312e3437382d35322e3635362d35322e3636342d36342e3833372d36342e6102008a01527f3833376c2e3034392d2e303337632d312e3732352d312e3630362d322e3731396102208a01527f2d332e3834372d322e3735312d362e3230346830632d2e3034362d322e3337356102408a01527f2c312e3036322d342e3538322c322e3732362d362e32323968306c2e3138352d6102608a01527f2e3134386830632e3039392d2e3036322c2e3232322d2e3134382c2e33372d2e6102808a01527f323539683063322e30362d312e3336322c332e3935312d322e3632312c362e306102a08a01527f34342d332e3834324335372e3736332d332e3437332c39372e37362d322e33346102c08a01527f312c3132382e3633372c31382e3333326331362e3637312c392e3934362d32366102e08a01527f2e3334342c35342e3831332d33382e3635312c34302e3139392d362e3239392d6103008a01527f362e3039362d31382e3036332d31372e3734332d31392e3636382d31382e38316103208a01527f312d362e3031362d342e3034372d31332e3036312c342e3737362d372e3735326103408a01527f2c392e3735316c36382e3235342c36382e33373163312e3732342c312e3630316103608a01527f2c322e3731342c332e38342c322e3733382c362e3139325a222f3e00000000006103808a0152604051978860a081011067ffffffffffffffff60a08b01111761430c57611cb0611d119160a08b0160405260758b527f3c706174682069643d22466c6f6174696e6754657874222066696c6c3d226e6f60208c01527f6e652220643d224d31323520343568373530733830203020383020383076373560408c01527f307330203830202d3830203830682d373530732d38302030202d3830202d383060608c01527f762d3735307330202d3830203830202d3830222f3e000000000000000000000060808c0152611867615a3d565b906040517f3c72616469616c4772616469656e742069643d2252616469616c476c6f77223e6020820152611d0c60d87f3c73746f70206f66667365743d223025222073746f702d636f6c6f723d22000093846040850152805161199960b88660208501936118d981605e840187614823565b8101997f222073746f702d6f7061636974793d222e36222f3e0000000000000000000000605e8c01527f3c73746f70206f66667365743d2231303025222073746f702d636f6c6f723d229a8b607382015261193e825180936020609385019101614823565b017f222073746f702d6f7061636974793d2230222f3e00000000000000000000000060938201527f3c2f72616469616c4772616469656e743e00000000000000000000000000000060a78201520360988101885201866148dc565b6119a1615a3d565b90604051967f3c6c696e6561724772616469656e742069643d2253616e64546f70222078313d60208901527f223025222079313d223025223e000000000000000000000000000000000000006040890152604d8801528251611a0781606b8a0184614823565b8701917f222f3e00000000000000000000000000000000000000000000000000000000009283606b82015289606e820152611a4c825180936020608e85019101614823565b019082608e830152611a9060a2897f3c2f6c696e6561724772616469656e743e0000000000000000000000000000009485609182015203608281018b5201896148dc565b611bd6610108611a9e615a3d565b6040519b8c917f3c6c696e6561724772616469656e742069643d2253616e64426f74746f6d222060208401527f78313d2231303025222079313d2231303025223e00000000000000000000000060408401527f3c73746f70206f66667365743d22313025222073746f702d636f6c6f723d22006054840152611b2a815180926020607387019101614823565b8201908760738301526076820152875190611b49826096830188614823565b018660968201527f3c616e696d617465206174747269627574654e616d653d22783122206475723d60998201527f2236732220726570656174436f756e743d22696e646566696e6974652220766160b98201527f6c7565733d223330253b3630253b313230253b3630253b3330253b222f3e000060d98201528560f78201520360e881018c52018a6148dc565b611bde615a3d565b906040519a8b957f3c6c696e6561724772616469656e742069643d22486f7572676c61737353747260208801527f6f6b6522206772616469656e745472616e73666f726d3d22726f74617465283960408801527f302922206772616469656e74556e6974733d227573657253706163654f6e557360608801527f65223e000000000000000000000000000000000000000000000000000000000060808801527f3c73746f70206f66667365743d22353025222073746f702d636f6c6f723d2200608388015251809260a2880190614823565b84018360a28201527f3c73746f70206f66667365743d22383025222073746f702d636f6c6f723d220060a5820152611cf282518093602060c485019101614823565b019160c483015260c78201520360b88101875201856148dc565b614e1c565b92611d31611d1d615813565b896020815191012090602081519101201490565b9788156146a8575b506040518060c081011067ffffffffffffffff60c08301111761430c5760c08101604052609081527f3c7061746820643d224d2035302c3336302061203330302c333030203020312c60208201527f31203630302c302061203330302c333030203020312c31202d3630302c30222060408201527f66696c6c3d2223666666222066696c6c2d6f7061636974793d222e303222207360608201527f74726f6b653d2275726c2823486f7572676c6173735374726f6b65292220737460808201527f726f6b652d77696474683d2234222f3e0000000000000000000000000000000060a082015260405193846102c081011067ffffffffffffffff6102c08701111761430c576102c0850160405261029885527f3c7061746820643d226d3536362c3136312e323031762d35332e39323463302d60208601527f31392e3338322d32322e3531332d33372e3536332d36332e3339382d35312e3160408601527f39382d34302e3735362d31332e3539322d39342e3934362d32312e3037392d3160608601527f35322e3538372d32312e303739732d3131312e3833382c372e3438372d31353260808601527f2e3630322c32312e303739632d34302e3839332c31332e3633362d36332e343160a08601527f332c33312e3831362d36332e3431332c35312e3139387635332e39323463302c60c08601527f31372e3138312c31372e3730342c33332e3432372c35302e3232332c34362e3360e08601527f3934763238342e383039632d33322e3531392c31322e39362d35302e3232332c6101008601527f32392e3230362d35302e3232332c34362e3339347635332e39323463302c31396101208601527f2e3338322c32322e35322c33372e3536332c36332e3431332c35312e3139382c6101408601527f34302e3736332c31332e3539322c39342e3935342c32312e3037392c3135322e6101608601527f3630322c32312e303739733131312e3833312d372e3438372c3135322e3538376101808601527f2d32312e3037396334302e3838362d31332e3633362c36332e3339382d33312e6101a08601527f3831362c36332e3339382d35312e313938762d35332e39323463302d31372e316101c08601527f39362d31372e3730342d33332e3433352d35302e3232332d34362e34303156326101e08601527f30372e3630336333322e3531392d31322e3936372c35302e3232332d32392e326102008601527f30362c35302e3232332d34362e3430315a6d2d3334372e3436322c35372e37396102208601527f336c3133302e3935392c3133312e3032372d3133302e3935392c3133312e30316102408601527f33563231382e3939345a6d3236322e3932342e303232763236322e3031386c2d6102608601527f3133302e3933372d3133312e3030362c3133302e3933372d3133312e3031335a6102808601527f222066696c6c3d2223313631383232223e3c2f706174683e00000000000000006102a0860152896000146144835760405161218b81614888565b60008152995b1561432257604051806101e081011067ffffffffffffffff6101e08301111761430c576101e081016040526101b181527f3c7061746820643d226d3438312e34362c3438312e35347638312e3031632d3260208201527f2e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e332c60408201527f382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d353360608201527f2e362c302d3130312e32342d362e33332d3133312e34372d31362e3136762d3860808201527f316c34362e332d34362e3331683137302e33336c34362e32392c34362e33315a60a08201527f222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7061746860c08201527f20643d226d3433352e31372c3433352e323363302c312e31372d2e34362c322e60e08201527f33322d312e33332c332e34342d372e31312c392e30382d34312e39332c31352e6101008201527f39382d38332e38312c31352e3938732d37362e372d362e392d38332e38322d316101208201527f352e3938632d2e38372d312e31322d312e33332d322e32372d312e33332d332e6101408201527f3434762d2e30346c382e33342d382e33352e30312d2e30316331332e37322d366101608201527f2e35312c34322e39352d31312e30322c37362e382d31312e30327336322e39376101808201527f2c342e34392c37362e37322c31316c382e34322c382e34325a222066696c6c3d6101a08201527f2275726c282353616e64546f7029222f3e0000000000000000000000000000006101c0820152995b60405196876107e081011067ffffffffffffffff6107e08a01111761430c57613b9c9c612e586036602d9960819f97631e17b39f60e11b8d7f3c2f646566733e000000000000000000000000000000000000000000000000009a612f279f6107e0016040526107a782527f3c672066696c6c3d226e6f6e6522207374726f6b653d2275726c2823486f757260208301527f676c6173735374726f6b652922207374726f6b652d6c696e656361703d22726f60408301527f756e6422207374726f6b652d6d697465726c696d69743d22313022207374726f60608301527f6b652d77696474683d2234223e3c7061746820643d226d3536352e3634312c3160808301527f30372e323863302c392e3533372d352e35362c31382e3632392d31352e36373660a08301527f2c32362e393733682d2e303233632d392e3230342c372e3539362d32322e313960c08301527f342c31342e3536322d33382e3139372c32302e3539322d33392e3530342c313460e08301527f2e3933362d39372e3332352c32342e3335352d3136312e3733332c32342e33356101008301527f352d39302e34382c302d3136372e3934382d31382e3538322d3139392e3935336101208301527f2d34342e393438682d2e303233632d31302e3131352d382e3334342d31352e366101408301527f37362d31372e3433372d31352e3637362d32362e3937332c302d33392e3733356101608301527f2c39362e3535342d37312e3932312c3231352e3635322d37312e3932317332316101808301527f352e3632392c33322e3138352c3231352e3632392c37312e3932315a222f3e3c6101a08301527f7061746820643d226d3133342e33362c3136312e32303363302c33392e3733356101c08301527f2c39362e3535342c37312e3932312c3231352e3635322c37312e3932317332316101e08301527f352e3632392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c6102008301527f696e652078313d223133342e3336222079313d223136312e323033222078323d6102208301527f223133342e3336222079323d223130372e3238222f3e3c6c696e652078313d226102408301527f3536352e3634222079313d223136312e323033222078323d223536352e3634226102608301527f2079323d223130372e3238222f3e3c6c696e652078313d223138342e353834226102808301527f2079313d223230362e383233222078323d223138342e353835222079323d22356102a08301527f33372e353739222f3e3c6c696e652078313d223231382e313831222079313d226102c08301527f3231382e313138222078323d223231382e313831222079323d223536322e35336102e08301527f37222f3e3c6c696e652078313d223438312e383138222079313d223231382e316103008301527f3432222078323d223438312e383139222079323d223536322e343238222f3e3c6103208301527f6c696e652078313d223531352e343135222079313d223230372e3335322220786103408301527f323d223531352e343136222079323d223533372e353739222f3e3c70617468206103608301527f643d226d3138342e35382c3533372e353863302c352e34352c342e32372c31306103808301527f2e36352c31322e30332c31352e3432682e303263352e35312c332e33392c31326103a08301527f2e37392c362e35352c32312e35352c392e34322c33302e32312c392e392c37386103c08301527f2e30322c31362e32382c3133312e38332c31362e32382c34392e34312c302c396103e08301527f332e37362d352e33382c3132342e30362d31332e39322c322e372d2e37362c356104008301527f2e32392d312e35342c372e37352d322e33352c382e37372d322e38372c31362e6104208301527f30352d362e30342c32312e35362d392e3433683063372e37362d342e37372c316104408301527f322e30342d392e39372c31322e30342d31352e3432222f3e3c7061746820643d6104608301527f226d3138342e3538322c3439322e363536632d33312e3335342c31322e3438356104808301527f2d35302e3232332c32382e35382d35302e3232332c34362e3134322c302c392e6104a08301527f3533362c352e3536342c31382e3632372c31352e3637372c32362e393639682e6104c08301527f30323263382e3530332c372e3030352c32302e3231332c31332e3436332c33346104e08301527f2e3532342c31392e3135392c392e3939392c332e3939312c32312e3236392c376105008301527f2e3630392c33332e3539372c31302e3738382c33362e34352c392e3430372c386105208301527f322e3138312c31352e3030322c3133312e3833352c31352e3030327339352e336105408301527f36332d352e3539352c3133312e3830372d31352e3030326331302e3834372d326105608301527f2e37392c32302e3836372d352e3932362c32392e3932342d392e3334392c312e6105808301527f3234342d2e3436372c322e3437332d2e3934322c332e3637332d312e3432342c6105a08301527f31342e3332362d352e3639362c32362e3033352d31322e3136312c33342e35326105c08301527f342d31392e313733682e3032326331302e3131342d382e3334322c31352e36376105e08301527f372d31372e3433332c31352e3637372d32362e3936392c302d31372e3536322d6106008301527f31382e3836392d33332e3636352d35302e3232332d34362e3135222f3e3c70616106208301527f746820643d226d3133342e33362c3539322e373263302c33392e3733352c39366106408301527f2e3535342c37312e3932312c3231352e3635322c37312e393231733231352e366106608301527f32392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c696e656106808301527f2078313d223133342e3336222079313d223539322e3732222078323d223133346106a08301527f2e3336222079323d223533382e373937222f3e3c6c696e652078313d223536356106c08301527f2e3634222079313d223539322e3732222078323d223536352e3634222079323d6106e08301527f223533382e373937222f3e3c706f6c796c696e6520706f696e74733d223438316107008301527f2e383232203438312e393031203438312e373938203438312e383737203438316107208301527f2e373735203438312e383534203335302e303135203335302e303236203231386107408301527f2e313835203231382e313239222f3e3c706f6c796c696e6520706f696e74733d6107608301527f223231382e313835203438312e393031203231382e323331203438312e3835346107808301527f203335302e303135203335302e303236203438312e383232203231382e3135326107a08301527f222f3e3c2f673e000000000000000000000000000000000000000000000000006107c0830152604051998a957f3c672069643d22486f7572676c617373223e000000000000000000000000000060208801528551612df48160329860208a8c019101614823565b8701612e098251809360208a85019101614823565b01612e1d8251809360208985019101614823565b01612e318251809360208885019101614823565b01612e458251809360208785019101614823565b01918201520360168101865201846148dc565b6040519e8f9788977f3c646566733e000000000000000000000000000000000000000000000000000060208a0152612e9b8151809260206026809d019101614823565b8901612eb08251809360208c85019101614823565b01612ec48251809360208b85019101614823565b01612ed88251809360208a85019101614823565b01612eec8251809360208985019101614823565b01612f008251809360208885019101614823565b01612f148251809360208785019101614823565b019182015203600d8101895201876148dc565b6137ba604c60c0830151610120840151936135166131496040602084015193015196612f538186615981565b9461314461012b604051612f66816148c0565b600581527f2d3130302500000000000000000000000000000000000000000000000000000060208201526040519889917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152612fd0815180926020603787019101614823565b7f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666683820160378101919091527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015282519261311491849161012090910190602001614823565b6a1e17ba32bc3a2830ba341f60a91b90830190910161012081019190915281900361010b810190915201876148dc565b615981565b9561332861012b60405161315c816148c0565b600281527f30250000000000000000000000000000000000000000000000000000000000006020820152604051998a917f3c74657874506174682073746172744f66667365743d2200000000000000000060208401526131c6815180926020603787019101614823565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015261330382518093602061012085019101614823565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b81018a5201886148dc565b61333281846159e9565b9261351161012b604051613345816148c0565b600481527f2d3530250000000000000000000000000000000000000000000000000000000060208201526040519687917f3c74657874506174682073746172744f66667365743d2200000000000000000060208401526133af815180926020603787019101614823565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201526134ec82518093602061012085019101614823565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101875201856148dc565b6159e9565b906136f561012b604051613529816148c0565b600381527f353025000000000000000000000000000000000000000000000000000000000060208201526040519485917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152613593815180926020603787019101614823565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201526136d082518093602061012085019101614823565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101855201836148dc565b6040519586937f3c7465787420746578742d72656e646572696e673d226f7074696d697a65537060208601527f656564223e000000000000000000000000000000000000000000000000000000604086015261375b815180926020604589019101614823565b8401613771825180936020604585019101614823565b01613786825180936020604585019101614823565b0161379b825180936020604585019101614823565b01661e17ba32bc3a1f60c91b604582015203602c8101845201826148dc565b613a9b61019c60e084015193610140810151906137fc6137f66137f06137ea60806101a086015195015199614b05565b94614b05565b92614b05565b96614b05565b906040519687937f3c75736520687265663d2223476c6f77222066696c6c2d6f7061636974793d2260208601527f2e39222f3e00000000000000000000000000000000000000000000000000000060408601527f3c75736520687265663d2223476c6f772220783d22313030302220793d22313060458601527f3030222066696c6c2d6f7061636974793d222e39222f3e00000000000000000060658601527f3c75736520687265663d22234c6f676f2220783d223137302220793d22313730607c8601527f22207472616e73666f726d3d227363616c65282e3629222f3e3c757365206872609c8601527f65663d2223486f7572676c6173732220783d223135302220793d22393022207460bc8601527f72616e73666f726d3d22726f746174652831302922207472616e73666f726d2d60dc8601527f6f726967696e3d2235303020353030222f3e000000000000000000000000000060fc8601527f3c75736520687265663d222350726f67726573732220783d220000000000000061010e860152805161399681610127936020858a019101614823565b8501927f2220793d22373930222f3e0000000000000000000000000000000000000000008481809694819501527f3c75736520687265663d22235374617475732220783d22000000000000000000610132820152825190613a01826101499560208785019101614823565b01918201527f3c75736520687265663d222353747265616d65642220783d2200000000000000610154820152825190613a448261016d9560208785019101614823565b01918201527f3c75736520687265663d22234475726174696f6e2220783d2200000000000000610178820152825190613a87826101919560208785019101614823565b01918201520361017c8101855201836148dc565b6040519586937f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208601527f30302f737667222077696474683d223130303022206865696768743d2231303060408601527f30222076696577426f783d2230203020313030302031303030223e00000000006060860152613b27815180926020607b89019101614823565b8401613b3d825180936020607b85019101614823565b01613b52825180936020607b85019101614823565b01613b67825180936020607b85019101614823565b017f3c2f7376673e0000000000000000000000000000000000000000000000000000607b8201520360618101845201826148dc565b6101405260a05160e0516040517fb971302a0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa908115614300576000916142b5575b6142b161424a61414f614240609487613d376089613c158a614c55565b9260a0608001516040519485927f5b7b2274726169745f74797065223a224173736574222c2276616c7565223a226020850152613c5c815180926020604088019101614823565b8301907f227d2c7b2274726169745f74797065223a2253656e646572222c2276616c756560408301527f223a22000000000000000000000000000000000000000000000000000000000091826060820152613cc1825180936020606385019101614823565b01907f227d2c7b2274726169745f74797065223a22537461747573222c2276616c756560638301526083820152613d02825180936020608685019101614823565b017f227d5d000000000000000000000000000000000000000000000000000000000060868201520360698101845201826148dc565b6101a05160a05161403961017e613d4f602435614b05565b936080800151613d696001600160a01b0360805116614c55565b90604051968793613f2660208601987f54686973204e465420726570726573656e74732061207061796d656e742073748a527f7265616d20696e2061205361626c696572205632200000000000000000000000604088015282516020840190613dd68160558b0184614823565b8801947f20636f6e74726163742e20546865206f776e6572206f662074686973204e465460558701527f2063616e207769746864726177207468652073747265616d656420617373657460758701527f732c207768696368206172652064656e6f6d696e6174656420696e2000000000609587015282516020840196613e608260b183018a614823565b017f2e5c6e5c6e2d2053747265616d2049443a20000000000000000000000000000060b1820152613e9b82518093602060c385019101614823565b01613ed47f5c6e2d2000000000000000000000000000000000000000000000000000000000958660c384015251809360c7840190614823565b01947f20416464726573733a2000000000000000000000000000000000000000000000958660c7820152613f1282518093602060d185019101614823565b019260d184015251809360d5840190614823565b019060d5820152613f4182518093602060df85019101614823565b017f5c6e5c6e0000000000000000000000000000000000000000000000000000000060df8201527fe29aa0efb88f205741524e494e473a205472616e7366657272696e672074686560e38201527f204e4654206d616b657320746865206e6577206f776e657220746865207265636101038201527f697069656e74206f66207468652073747265616d2e205468652066756e6473206101238201527f617265206e6f74206175746f6d61746963616c6c792077697468647261776e206101438201527f666f72207468652070726576696f757320726563697069656e742e00000000006101638201520361015e8101855201836148dc565b6101a051906141aa61404c602435614b05565b916140cb602d604051809560208201976a029b0b13634b2b9102b19160ad1b8952614081815180926020602b87019101614823565b82017f2023000000000000000000000000000000000000000000000000000000000000602b8201526140bc8251809360208785019101614823565b0103600d8101865201846148dc565b610140516140d890614991565b94604051998a977f7b2261747472696275746573223a00000000000000000000000000000000000060208a0152614119815180926020602e8d019101614823565b8801917f2c226465736372697074696f6e223a2200000000000000000000000000000000602e840152518093603e840190614823565b01917f222c2265787465726e616c5f75726c223a2268747470733a2f2f7361626c6965603e8401527f722e636f6d222c226e616d65223a220000000000000000000000000000000000605e840152518093606d840190614823565b017f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261606d8201527f736536342c000000000000000000000000000000000000000000000000000000608d82015261420b825180936020609285019101614823565b017f227d00000000000000000000000000000000000000000000000000000000000060928201520360748101845201826148dc565b60c0819052614991565b61429d603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261428d8151809260208686019101614823565b810103601d8101845201826148dc565b604051918291602083526020830190614846565b0390f35b90506020813d6020116142f8575b816142d0602093836148dc565b810103126142f35751906001600160a01b03821682036142f3579061414f613bf8565b600080fd5b3d91506142c3565b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b6040518061012081011067ffffffffffffffff6101208301111761430c57610120810160405260f881527f3c7061746820643d226d3438312e34362c3530342e3130317635382e3434396360208201527f2d322e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e60408201527f332c382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d60608201527f35332e362c302d3130312e32342d362e33332d3133312e34372d31362e31367660808201527f2d35382e343339683236322e39325a222066696c6c3d2275726c282353616e6460a08201527f426f74746f6d29222f3e3c656c6c697073652063783d22333530222063793d2260c08201527f3530342e313031222072783d223133312e343632222072793d2232382e31303860e08201527f222066696c6c3d2275726c282353616e64546f7029222f3e0000000000000000610100820152996123de565b604051806101c081011067ffffffffffffffff6101c08301111761430c576101c0810160405261019981527f3c706f6c79676f6e20706f696e74733d22333530203335302e3032362034313560208201527f2e3033203238342e39373820323835203238342e39373820333530203335302e60408201527f303236222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7060608201527f61746820643d226d3431362e3334312c3238312e39373563302c2e3931342d2e60808201527f3335342c312e3830392d312e3033352c322e36382d352e3534322c372e30373660a08201527f2d33322e3636312c31322e34352d36352e32382c31322e34352d33322e36323460c08201527f2c302d35392e3733382d352e3337342d36352e32382d31322e34352d2e36383160e08201527f2d2e3837322d312e3033352d312e3736372d312e3033352d322e36382c302d2e6101008201527f3931342e3335342d312e3830382c312e3033352d322e3637362c352e3534322d6101208201527f372e3037362c33322e3635362d31322e34352c36352e32382d31322e34352c336101408201527f322e3631392c302c35392e3733382c352e3337342c36352e32382c31322e34356101608201527f2e3638312e3836372c312e3033352c312e3736322c312e3033352c322e3637366101808201527f5a222066696c6c3d2275726c282353616e64546f7029222f3e000000000000006101a082015299612191565b6146ca9198506146b661584c565b906020815191012090602081519101201490565b9638611d39565b905093610d64565b905094610a2f565b60d09461072c565b61470b915060203d602011614711575b61470381836148dc565b810190614926565b386104e0565b503d6146f9565b614731915060203d6020116147115761470381836148dc565b38610489565b634e487b7160e01b600052601260045260246000fd5b61477091925060203d602011614777575b61476881836148dc565b8101906148fe565b903861023d565b503d61475e565b614797915060203d6020116147775761476881836148dc565b386101d2565b506020813d6020116147d2575b816147b7602093836148dc565b810103126142f3575160058110156142f3576101779061016d565b3d91506147aa565b90506020813d60201161481b575b816147f5602093836148dc565b810103126142f357516001600160a01b03811681036142f3576001600160a01b036100ff565b3d91506147e8565b60005b8381106148365750506000910152565b8181015183820152602001614826565b9060209161485f81518092818552858086019101614823565b601f01601f1916010190565b610140810190811067ffffffffffffffff82111761430c57604052565b6020810190811067ffffffffffffffff82111761430c57604052565b6060810190811067ffffffffffffffff82111761430c57604052565b6040810190811067ffffffffffffffff82111761430c57604052565b90601f8019910116810190811067ffffffffffffffff82111761430c57604052565b908160209103126142f357516fffffffffffffffffffffffffffffffff811681036142f35790565b908160209103126142f3575164ffffffffff811681036142f35790565b67ffffffffffffffff811161430c57601f01601f191660200190565b9061496982614943565b61497660405191826148dc565b8281528092614987601f1991614943565b0190602036910137565b805115614af1576040516149a4816148a4565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408201528151600292838201809211614adb5760038092047f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103614adb57614a3e908594951b61495f565b936020850193829183518401925b838110614a8a5750505050510680600114614a7757600214614a6c575090565b603d90600019015390565b50603d9081600019820153600119015390565b85600491979293949701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c1688010151888501531685010151878201530195929190614a4c565b634e487b7160e01b600052601160045260246000fd5b50604051614afe81614888565b6000815290565b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000080821015614c47575b506d04ee2d6d415b85acef810000000080831015614c38575b50662386f26fc1000080831015614c29575b506305f5e10080831015614c1a575b5061271080831015614c0b575b506064821015614bfb575b600a80921015614bf1575b600190816021614b9c82870161495f565b95860101905b614bae575b5050505090565b600019019083907f30313233343536373839616263646566000000000000000000000000000000008282061a835304918215614bec57919082614ba2565b614ba7565b9160010191614b8b565b9190606460029104910191614b80565b60049193920491019138614b75565b60089193920491019138614b68565b60109193920491019138614b59565b60209193920491019138614b47565b604093508104915038614b2e565b6001600160a01b031660405190614c6b826148a4565b602a8252602082016040368237825115614d8357603090538151600190811015614d8357607860218401536029905b808211614d08575050614caa5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015614d6e577f3031323334353637383961626364656600000000000000000000000000000000901a614d448486614d99565b5360041c918015614d59576000190190614c9a565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b634e487b7160e01b600052603260045260246000fd5b908151811015614d83570160200190565b60405190614db7826148c0565b600482527f2667743b000000000000000000000000000000000000000000000000000000006020830152565b60405190614df0826148c0565b600482527f266c743b000000000000000000000000000000000000000000000000000000006020830152565b90614e839294936040519586928451614e3d81602097888089019101614823565b8401614e5182518093888085019101614823565b01614e6482518093878085019101614823565b01614e7782518093868085019101614823565b010380855201836148dc565b565b80156151965760009180615171575090505b6001908082811015614f0457505050614eae614de3565b614f01602260405183614ecb829551809260208086019101614823565b81017f203100000000000000000000000000000000000000000000000000000000000060208201520360028101845201826148dc565b90565b66038d7ea4c6800011156151145760409081519060a0820182811067ffffffffffffffff82111761430c57808452614f3b81614888565b600081528252825190614f4d826148c0565b8482526020917f4b0000000000000000000000000000000000000000000000000000000000000083820152828401528351614f87816148c0565b8581527f4d0000000000000000000000000000000000000000000000000000000000000083820152848401528351614fbe816148c0565b8581527f42000000000000000000000000000000000000000000000000000000000000008382015260608401528351614ff6816148c0565b8581527f54000000000000000000000000000000000000000000000000000000000000008382015260808401526000918583965b6150e8575b5084519461503c866148c0565b6007908187527f2623383830353b0000000000000000000000000000000000000000000000000083880152519560005b8281106150d557505050506150b66150bc917f20000000000000000000000000000000000000000000000000000000000000006027870152600886526150b1866148c0565b614b05565b91615740565b916005851015614d8357614f019460051b015192614e1c565b818101840151888201850152830161506c565b9591926103e89081851061510b57508680916064600a870406950493019661502a565b9392965061502f565b505061511e614daa565b614f0160286040518361513b829551809260208086019101614823565b81017f203939392e39395400000000000000000000000000000000000000000000000060208201520360088101845201826148dc565b600a0a918215615182575004614e97565b80634e487b7160e01b602492526012600452fd5b50506040516151a4816148c0565b600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b620151809103048061523957506151e6614de3565b614f01602660405183615203829551809260208086019101614823565b81017f203120446179000000000000000000000000000000000000000000000000000060208201520360068101845201826148dc565b61270f811161530857600181036152c557614f01602061528d60405161525e816148c0565b600481527f20446179000000000000000000000000000000000000000000000000000000008382015293614b05565b60405193816152a58693518092868087019101614823565b82016152b982518093868085019101614823565b010380845201826148dc565b614f01602061528d6040516152d9816148c0565b600581527f20446179730000000000000000000000000000000000000000000000000000008382015293614b05565b50615311614daa565b614f01602a6040518361532e829551809260208086019101614823565b81017f2039393939204461797300000000000000000000000000000000000000000000602082015203600a8101845201826148dc565b6020818303126142f35780519067ffffffffffffffff82116142f3570181601f820112156142f357805161539781614943565b926153a560405194856148dc565b818452602082840101116142f357614f019160208085019101614823565b6001600160a01b031660409081516395d89b4160e01b8152600081600481855afa90811561559d5760009161557c575b506154588351615402816148c0565b601181527f5341422d56322d4c4f434b55502d4c494e0000000000000000000000000000006020918201528251908301207fc66b376a19264d832c1bc254000c18944ca5aa57ed50f4ea637c4da424d4c3bb1490565b1561549657505051615469816148c0565b600d81527f4c6f636b7570204c696e65617200000000000000000000000000000000000000602082015290565b6154fa83516154a4816148c0565b601181527f5341422d56322d4c4f434b55502d44594e0000000000000000000000000000006020918201528251908301207f6ab655856fa5352de8c05542b1937ac63c59342da992602767c02734cc5391651490565b156155385750505161550b816148c0565b600e81527f4c6f636b75702044796e616d6963000000000000000000000000000000000000602082015290565b6155789083519384937f814a8a2e000000000000000000000000000000000000000000000000000000008552600485015260248401526044830190614846565b0390fd5b615597913d8091833e61558f81836148dc565b810190615364565b386153f3565b83513d6000823e3d90fd5b3d156155d3573d906155b982614943565b916155c760405193846148dc565b82523d6000602084013e565b606090565b60405160208101907f313ce56700000000000000000000000000000000000000000000000000000000825260048152615610816148c0565b6000928392839251915afa6156236155a8565b908061565a575b156156565760208180518101031261565257602001519060ff8216820361564f575090565b80fd5b5080fd5b5090565b50602081511461562a565b6000809160405160208101906395d89b4160e01b825260048152615688816148c0565b51915afa6156946155a8565b90158015615734575b6156fa57806020806156b493518301019101615364565b601e815111600014614f0157506040516156cd816148c0565b600b81527f4c6f6e672053796d626f6c000000000000000000000000000000000000000000602082015290565b50604051615707816148c0565b600581527f4552433230000000000000000000000000000000000000000000000000000000602082015290565b5060408151111561569d565b806157525750604051614afe81614888565b600a8110156157b75761576490614b05565b614f01602260405180937f2e3000000000000000000000000000000000000000000000000000000000000060208301526157a78151809260208686019101614823565b81010360028101845201826148dc565b6157c090614b05565b614f01602160405180937f2e0000000000000000000000000000000000000000000000000000000000000060208301526158038151809260208686019101614823565b81010360018101845201826148dc565b60405190615820826148c0565b600782527f536574746c6564000000000000000000000000000000000000000000000000006020830152565b60405190615859826148c0565b600882527f4465706c657465640000000000000000000000000000000000000000000000006020830152565b600581101561596b576004810361589f5750614f0161584c565b600381036158e157506040516158b4816148c0565b600881527f43616e63656c6564000000000000000000000000000000000000000000000000602082015290565b6001810361592357506040516158f6816148c0565b600981527f53747265616d696e670000000000000000000000000000000000000000000000602082015290565b60020361593257614f01615813565b60405161593e816148c0565b600781527f50656e64696e6700000000000000000000000000000000000000000000000000602082015290565b634e487b7160e01b600052602160045260246000fd5b6030614e839193929360405194816159a3879351809260208087019101614823565b820164010714051160dd1b60208201526a029b0b13634b2b9102b19160ad1b60258201526159da8251809360208785019101614823565b010360108101855201836148dc565b6025614e83919392936040519481615a0b879351809260208087019101614823565b820164010714051160dd1b6020820152615a2e8251809360208785019101614823565b010360058101855201836148dc565b60405190615a4a826148c0565b601082527f68736c283233302c3231252c31312529000000000000000000000000000000006020830152565b8015615ca857615a84615a3d565b90612710908103908111614adb57614f0191615aa261013692614b05565b6040519485927f3c672066696c6c3d226e6f6e65223e000000000000000000000000000000000060208501527f3c636972636c652063783d22313636222063793d2235302220723d2232322220602f8501527f7374726f6b653d22000000000000000000000000000000000000000000000000604f850152615b2e815180926020605788019101614823565b83017f22207374726f6b652d77696474683d223130222f3e000000000000000000000060578201527f3c636972636c652063783d22313636222063793d2235302220706174684c656e606c8201527f6774683d2231303030302220723d22323222207374726f6b653d220000000000608c820152615bb682518093602060a785019101614823565b017f22207374726f6b652d6461736861727261793d22313030303022207374726f6b60a78201527f652d646173686f66667365743d2200000000000000000000000000000000000060c7820152615c1782518093602060d585019101614823565b017f22207374726f6b652d6c696e656361703d22726f756e6422207374726f6b652d60d58201527f77696474683d223522207472616e73666f726d3d22726f74617465282d39302960f58201527f22207472616e73666f726d2d6f726967696e3d22313636203530222f3e000000610115820152631e17b39f60e11b610132820152036101168101845201826148dc565b5050604051614afe81614888565b60009080518015615d2b579060009182915b818310615cda57505050600d02900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615d0d8785614d99565b511614615d23575b600d01936001019190615cc8565b849350615d15565b505050600090565b60009080518015615d2b579060009182915b818310615d575750505060041b900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615d8a8785614d99565b511614615da0575b601001936001019190615d45565b849350615d9256"; + hex"6080806040523461001757615dab90816200001d8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63e9dc63751461002757600080fd5b346142f55760403660031901126142f5576001600160a01b0360043516600435036142f557610056608061486d565b60006080819052606060a081905260c0819052610100819052610120819052610140819052610160829052610180919091526101a0526004356001600160a01b031660e08190526100a690614c57565b6101005260e0516040517feac8f5b80000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa908115614302576000916147dc575b506001600160a01b03610116911680608052615668565b60a05260e0516040517fad35efd40000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143025760009061479f575b6101779150615888565b6101205260e0516040517f4869e12d0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa801561430257602491600091614780575b506fffffffffffffffffffffffffffffffff81166101605260e0516040517fa80fc071000000000000000000000000000000000000000000000000000000008152833560048201529260209184919082906001600160a01b03165afa9182156143025760009261474f575b506fffffffffffffffffffffffffffffffff821615614739576fffffffffffffffffffffffffffffffff9182169082166127100282160416610180526102846004356153c6565b610120608001526040514660208201526bffffffffffffffffffffffff1960043560601b16604082015260243560548201526054815280608081011067ffffffffffffffff60808301111761430e57608081016040526020815191012061041b602963ffffffff61032b6103048261016861ffff8860101c160616614b07565b91601e604660ff6103218460146050848d60081c16060116614b07565b9816060116614b07565b6040519485927f68736c2800000000000000000000000000000000000000000000000000000000602085015261036b815180926020602488019101614825565b83017f2c0000000000000000000000000000000000000000000000000000000000000060248201526103a7825180936020602585019101614825565b7f252c000000000000000000000000000000000000000000000000000000000000602583830101526103e58351809460206027868601019101614825565b01017f252900000000000000000000000000000000000000000000000000000000000060278201520360098101845201826148de565b61042f6001600160a01b0360805116614c57565b60a05160e0516040517fbc2be1be0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143025760249160009161471a575b5060206001600160a01b0360606080015116604051938480927f9067b677000000000000000000000000000000000000000000000000000000008252823560048301525afa8015614302576104f1926000916146eb575b5064ffffffffff80911691166151d4565b61010051610180516105786021610515606461050e818606615743565b9404614b07565b604051938161052e869351809260208087019101614825565b82016105438251809360208085019101614825565b017f250000000000000000000000000000000000000000000000000000000000000060208201520360018101845201826148de565b610100608001519060a060800151936105bf6fffffffffffffffffffffffffffffffff60e0608001511660ff6105b86001600160a01b03608051166155db565b1690614e88565b956101206080015197604051996105d58b61486d565b8a5260208a015260408901526060880152608087015260a086015260c085015260e0840152610100830152610120820152604051806101c081011067ffffffffffffffff6101c08301111761430e576101c081016040526060815260006020820152606060408201526000606082015260006080820152606060a0820152600060c0820152600060e08201526060610100820152600061012082015260006101408201526060610160820152600061018082015260006101a082015260808201516106a660a0840151845190615a79565b906109b361015c604051926106ba846148c2565b600884527f50726f677265737300000000000000000000000000000000000000000000000060208501526107236040516106f38161488a565b60009052855160208701207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701490565b156146e3576090945b61073586614b07565b916040519586938493661e339034b21e9160c91b60208601526109818351958692610767846027840160208901614825565b6d11103334b6361e9111b33333111f60911b602785840101526c1e3932b1ba103bb4b23a341e9160991b603585840101526107ae8551809660206042888701019101614825565b7f22206865696768743d22313030222066696c6c2d6f7061636974793d222e3033828501860160428101919091527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e88201528651966108b491889160f990910190602001614825565b661e17ba32bc3a1f60c91b8285018601870160f98101919091527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b61014082015287519761094f91899161015190910190602001614825565b661e17ba32bc3a1f60c91b6101518888888887010101010152602061015888888885519c8d9701010101019101614825565b631e17b39f60e11b90860190910190910190910190910161015881019190915281900361013c810190915201826148de565b60a083015260c0820152602860e0830151604051906109d18261488a565b60008252610c7761015c604051926109e8846148c2565b600684527f53746174757300000000000000000000000000000000000000000000000000006020850152610a1b84615cb9565b610a2482615d36565b808211156146db5750945b610a3a878701614b07565b91604051958693661e339034b21e9160c91b60208601528151610a64816027880160208601614825565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610aa7825180936020604285019101614825565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610ba382518093602060f985019101614825565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610c3282518093602061015185019101614825565b01661e17ba32bc3a1f60c91b610151820152610c5982518093602061015885019101614825565b01631e17b39f60e11b6101588201520361013c8101845201826148de565b61010084015201610120820152602861010083015160405190610c998261488a565b60008252610ce361015c60405192610cb0846148c2565b600884527f53747265616d65640000000000000000000000000000000000000000000000006020850152610a1b84615cb9565b6101608401520161018082015261102660608301516030604051610d068161488a565b60008152610fad61015c60405194610d1d866148c2565b600886527f4475726174696f6e0000000000000000000000000000000000000000000000006020870152610d5086615cb9565b610d5982615d36565b808211156146d35750935b610d7060288601614b07565b91604051978893661e339034b21e9160c91b60208601528151610d9a816027880160208601614825565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610ddd825180936020604285019101614825565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610ed982518093602060f985019101614825565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610f6882518093602061015185019101614825565b01661e17ba32bc3a1f60c91b610151820152610f8f82518093602061015885019101614825565b01631e17b39f60e11b6101588201520361013c8101865201846148de565b8260408601526028810160608601526101808501519060c0860151809161012088015192839185010101605881016020890152605719906103e8030160011c8060e0890152016010810161014088015201602081016101a08701520101608084015260a083015161010084015161016085015191614e1e565b8152604051908161010081011067ffffffffffffffff6101008401111761430e57610100820160405260c782527f3c726563742077696474683d223130302522206865696768743d22313030252260208301527f2066696c7465723d2275726c28234e6f69736529222f3e3c7265637420783d2260408301527f37302220793d223730222077696474683d2238363022206865696768743d223860608301527f3630222066696c6c3d2223666666222066696c6c2d6f7061636974793d222e3060808301527f33222072783d223435222072793d22343522207374726f6b653d22236666662260a08301527f207374726f6b652d6f7061636974793d222e3122207374726f6b652d7769647460c08301527f683d2234222f3e0000000000000000000000000000000000000000000000000060e083015282519160e084015191805194604051611175816148a6565b603381527f3c636972636c652069643d22476c6f772220723d22353030222066696c6c3d2260208201527f75726c282352616469616c476c6f7729222f3e000000000000000000000000006040820152604051966111d28861486d565b61011c88527f3c66696c7465722069643d224e6f697365223e3c6665466c6f6f6420783d223060208901527f2220793d2230222077696474683d223130302522206865696768743d2231303060408901527f252220666c6f6f642d636f6c6f723d2268736c283233302c3231252c3131252960608901527f2220666c6f6f642d6f7061636974793d22312220726573756c743d22666c6f6f60808901527f6446696c6c222f3e3c666554757262756c656e6365206261736546726571756560a08901527f6e63793d222e3422206e756d4f6374617665733d22332220726573756c743d2260c08901527f4e6f6973652220747970653d226672616374616c4e6f697365222f3e3c66654260e08901527f6c656e6420696e3d224e6f6973652220696e323d22666c6f6f6446696c6c22206101008901527f6d6f64653d22736f66742d6c69676874222f3e3c2f66696c7465723e0000000061012089015260405197886103a081011067ffffffffffffffff6103a08b01111761430e576103a0890160405261037b89527f3c706174682069643d224c6f676f222066696c6c3d2223666666222066696c6c60208a01527f2d6f7061636974793d222e312220643d226d3133332e3535392c3132342e303360408a01527f34632d2e3031332c322e3431322d312e3035392c342e3834382d322e3932332c60608a01527f362e3430322d322e3535382c312e3831392d352e3136382c332e3433392d372e60808a01527f3838382c342e3939362d31342e34342c382e3236322d33312e3034372c31322e60a08a01527f3536352d34372e3637342c31322e3536392d382e3835382e3033362d31372e3860c08a01527f33382d312e3237322d32362e3332382d332e3636332d392e3830362d322e373660e08a01527f362d31392e3038372d372e3131332d32372e3536322d31322e3737382d31332e6101008a01527f3834322d382e3032352c392e3436382d32382e3630362c31362e3135332d33356101208a01527f2e323635683063322e3033352d312e3833382c342e3235322d332e3534362c366101408a01527f2e3436332d352e323234683063362e3432392d352e3635352c31362e3231382d6101608a01527f322e3833352c32302e3335382c342e31372c342e3134332c352e3035372c382e6101808a01527f3831362c392e3634392c31332e39322c31332e373334682e30333763352e37336101a08a01527f362c362e3436312c31352e3335372d322e3235332c392e33382d382e34382c306101c08a01527f2c302d332e3531352d332e3531352d332e3531352d332e3531352d31312e34396101e08a01527f2d31312e3437382d35322e3635362d35322e3636342d36342e3833372d36342e6102008a01527f3833376c2e3034392d2e303337632d312e3732352d312e3630362d322e3731396102208a01527f2d332e3834372d322e3735312d362e3230346830632d2e3034362d322e3337356102408a01527f2c312e3036322d342e3538322c322e3732362d362e32323968306c2e3138352d6102608a01527f2e3134386830632e3039392d2e3036322c2e3232322d2e3134382c2e33372d2e6102808a01527f323539683063322e30362d312e3336322c332e3935312d322e3632312c362e306102a08a01527f34342d332e3834324335372e3736332d332e3437332c39372e37362d322e33346102c08a01527f312c3132382e3633372c31382e3333326331362e3637312c392e3934362d32366102e08a01527f2e3334342c35342e3831332d33382e3635312c34302e3139392d362e3239392d6103008a01527f362e3039362d31382e3036332d31372e3734332d31392e3636382d31382e38316103208a01527f312d362e3031362d342e3034372d31332e3036312c342e3737362d372e3735326103408a01527f2c392e3735316c36382e3235342c36382e33373163312e3732342c312e3630316103608a01527f2c322e3731342c332e38342c322e3733382c362e3139325a222f3e00000000006103808a0152604051978860a081011067ffffffffffffffff60a08b01111761430e57611cb0611d119160a08b0160405260758b527f3c706174682069643d22466c6f6174696e6754657874222066696c6c3d226e6f60208c01527f6e652220643d224d31323520343568373530733830203020383020383076373560408c01527f307330203830202d3830203830682d373530732d38302030202d3830202d383060608c01527f762d3735307330202d3830203830202d3830222f3e000000000000000000000060808c0152611867615a40565b906040517f3c72616469616c4772616469656e742069643d2252616469616c476c6f77223e6020820152611d0c60d87f3c73746f70206f66667365743d223025222073746f702d636f6c6f723d22000093846040850152805161199960b88660208501936118d981605e840187614825565b8101997f222073746f702d6f7061636974793d222e36222f3e0000000000000000000000605e8c01527f3c73746f70206f66667365743d2231303025222073746f702d636f6c6f723d229a8b607382015261193e825180936020609385019101614825565b017f222073746f702d6f7061636974793d2230222f3e00000000000000000000000060938201527f3c2f72616469616c4772616469656e743e00000000000000000000000000000060a78201520360988101885201866148de565b6119a1615a40565b90604051967f3c6c696e6561724772616469656e742069643d2253616e64546f70222078313d60208901527f223025222079313d223025223e000000000000000000000000000000000000006040890152604d8801528251611a0781606b8a0184614825565b8701917f222f3e00000000000000000000000000000000000000000000000000000000009283606b82015289606e820152611a4c825180936020608e85019101614825565b019082608e830152611a9060a2897f3c2f6c696e6561724772616469656e743e0000000000000000000000000000009485609182015203608281018b5201896148de565b611bd6610108611a9e615a40565b6040519b8c917f3c6c696e6561724772616469656e742069643d2253616e64426f74746f6d222060208401527f78313d2231303025222079313d2231303025223e00000000000000000000000060408401527f3c73746f70206f66667365743d22313025222073746f702d636f6c6f723d22006054840152611b2a815180926020607387019101614825565b8201908760738301526076820152875190611b49826096830188614825565b018660968201527f3c616e696d617465206174747269627574654e616d653d22783122206475723d60998201527f2236732220726570656174436f756e743d22696e646566696e6974652220766160b98201527f6c7565733d223330253b3630253b313230253b3630253b3330253b222f3e000060d98201528560f78201520360e881018c52018a6148de565b611bde615a40565b906040519a8b957f3c6c696e6561724772616469656e742069643d22486f7572676c61737353747260208801527f6f6b6522206772616469656e745472616e73666f726d3d22726f74617465283960408801527f302922206772616469656e74556e6974733d227573657253706163654f6e557360608801527f65223e000000000000000000000000000000000000000000000000000000000060808801527f3c73746f70206f66667365743d22353025222073746f702d636f6c6f723d2200608388015251809260a2880190614825565b84018360a28201527f3c73746f70206f66667365743d22383025222073746f702d636f6c6f723d220060a5820152611cf282518093602060c485019101614825565b019160c483015260c78201520360b88101875201856148de565b614e1e565b92611d31611d1d615816565b896020815191012090602081519101201490565b9788156146aa575b506040518060c081011067ffffffffffffffff60c08301111761430e5760c08101604052609081527f3c7061746820643d224d2035302c3336302061203330302c333030203020312c60208201527f31203630302c302061203330302c333030203020312c31202d3630302c30222060408201527f66696c6c3d2223666666222066696c6c2d6f7061636974793d222e303222207360608201527f74726f6b653d2275726c2823486f7572676c6173735374726f6b65292220737460808201527f726f6b652d77696474683d2234222f3e0000000000000000000000000000000060a082015260405193846102c081011067ffffffffffffffff6102c08701111761430e576102c0850160405261029885527f3c7061746820643d226d3536362c3136312e323031762d35332e39323463302d60208601527f31392e3338322d32322e3531332d33372e3536332d36332e3339382d35312e3160408601527f39382d34302e3735362d31332e3539322d39342e3934362d32312e3037392d3160608601527f35322e3538372d32312e303739732d3131312e3833382c372e3438372d31353260808601527f2e3630322c32312e303739632d34302e3839332c31332e3633362d36332e343160a08601527f332c33312e3831362d36332e3431332c35312e3139387635332e39323463302c60c08601527f31372e3138312c31372e3730342c33332e3432372c35302e3232332c34362e3360e08601527f3934763238342e383039632d33322e3531392c31322e39362d35302e3232332c6101008601527f32392e3230362d35302e3232332c34362e3339347635332e39323463302c31396101208601527f2e3338322c32322e35322c33372e3536332c36332e3431332c35312e3139382c6101408601527f34302e3736332c31332e3539322c39342e3935342c32312e3037392c3135322e6101608601527f3630322c32312e303739733131312e3833312d372e3438372c3135322e3538376101808601527f2d32312e3037396334302e3838362d31332e3633362c36332e3339382d33312e6101a08601527f3831362c36332e3339382d35312e313938762d35332e39323463302d31372e316101c08601527f39362d31372e3730342d33332e3433352d35302e3232332d34362e34303156326101e08601527f30372e3630336333322e3531392d31322e3936372c35302e3232332d32392e326102008601527f30362c35302e3232332d34362e3430315a6d2d3334372e3436322c35372e37396102208601527f336c3133302e3935392c3133312e3032372d3133302e3935392c3133312e30316102408601527f33563231382e3939345a6d3236322e3932342e303232763236322e3031386c2d6102608601527f3133302e3933372d3133312e3030362c3133302e3933372d3133312e3031335a6102808601527f222066696c6c3d2223313631383232223e3c2f706174683e00000000000000006102a0860152896000146144855760405161218b8161488a565b60008152995b1561432457604051806101e081011067ffffffffffffffff6101e08301111761430e576101e081016040526101b181527f3c7061746820643d226d3438312e34362c3438312e35347638312e3031632d3260208201527f2e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e332c60408201527f382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d353360608201527f2e362c302d3130312e32342d362e33332d3133312e34372d31362e3136762d3860808201527f316c34362e332d34362e3331683137302e33336c34362e32392c34362e33315a60a08201527f222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7061746860c08201527f20643d226d3433352e31372c3433352e323363302c312e31372d2e34362c322e60e08201527f33322d312e33332c332e34342d372e31312c392e30382d34312e39332c31352e6101008201527f39382d38332e38312c31352e3938732d37362e372d362e392d38332e38322d316101208201527f352e3938632d2e38372d312e31322d312e33332d322e32372d312e33332d332e6101408201527f3434762d2e30346c382e33342d382e33352e30312d2e30316331332e37322d366101608201527f2e35312c34322e39352d31312e30322c37362e382d31312e30327336322e39376101808201527f2c342e34392c37362e37322c31316c382e34322c382e34325a222066696c6c3d6101a08201527f2275726c282353616e64546f7029222f3e0000000000000000000000000000006101c0820152995b60405196876107e081011067ffffffffffffffff6107e08a01111761430e57613b9e9c612e596036602d9960819f97631e17b39f60e11b8d7f3c2f646566733e000000000000000000000000000000000000000000000000009a612f2a9f6107e0016040526107a782527f3c672066696c6c3d226e6f6e6522207374726f6b653d2275726c2823486f757260208301527f676c6173735374726f6b652922207374726f6b652d6c696e656361703d22726f60408301527f756e6422207374726f6b652d6d697465726c696d69743d22313022207374726f60608301527f6b652d77696474683d2234223e3c7061746820643d226d3536352e3634312c3160808301527f30372e323863302c392e3533372d352e35362c31382e3632392d31352e36373660a08301527f2c32362e393733682d2e303233632d392e3230342c372e3539362d32322e313960c08301527f342c31342e3536322d33382e3139372c32302e3539322d33392e3530342c313460e08301527f2e3933362d39372e3332352c32342e3335352d3136312e3733332c32342e33356101008301527f352d39302e34382c302d3136372e3934382d31382e3538322d3139392e3935336101208301527f2d34342e393438682d2e303233632d31302e3131352d382e3334342d31352e366101408301527f37362d31372e3433372d31352e3637362d32362e3937332c302d33392e3733356101608301527f2c39362e3535342d37312e3932312c3231352e3635322d37312e3932317332316101808301527f352e3632392c33322e3138352c3231352e3632392c37312e3932315a222f3e3c6101a08301527f7061746820643d226d3133342e33362c3136312e32303363302c33392e3733356101c08301527f2c39362e3535342c37312e3932312c3231352e3635322c37312e3932317332316101e08301527f352e3632392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c6102008301527f696e652078313d223133342e3336222079313d223136312e323033222078323d6102208301527f223133342e3336222079323d223130372e3238222f3e3c6c696e652078313d226102408301527f3536352e3634222079313d223136312e323033222078323d223536352e3634226102608301527f2079323d223130372e3238222f3e3c6c696e652078313d223138342e353834226102808301527f2079313d223230362e383233222078323d223138342e353835222079323d22356102a08301527f33372e353739222f3e3c6c696e652078313d223231382e313831222079313d226102c08301527f3231382e313138222078323d223231382e313831222079323d223536322e35336102e08301527f37222f3e3c6c696e652078313d223438312e383138222079313d223231382e316103008301527f3432222078323d223438312e383139222079323d223536322e343238222f3e3c6103208301527f6c696e652078313d223531352e343135222079313d223230372e3335322220786103408301527f323d223531352e343136222079323d223533372e353739222f3e3c70617468206103608301527f643d226d3138342e35382c3533372e353863302c352e34352c342e32372c31306103808301527f2e36352c31322e30332c31352e3432682e303263352e35312c332e33392c31326103a08301527f2e37392c362e35352c32312e35352c392e34322c33302e32312c392e392c37386103c08301527f2e30322c31362e32382c3133312e38332c31362e32382c34392e34312c302c396103e08301527f332e37362d352e33382c3132342e30362d31332e39322c322e372d2e37362c356104008301527f2e32392d312e35342c372e37352d322e33352c382e37372d322e38372c31362e6104208301527f30352d362e30342c32312e35362d392e3433683063372e37362d342e37372c316104408301527f322e30342d392e39372c31322e30342d31352e3432222f3e3c7061746820643d6104608301527f226d3138342e3538322c3439322e363536632d33312e3335342c31322e3438356104808301527f2d35302e3232332c32382e35382d35302e3232332c34362e3134322c302c392e6104a08301527f3533362c352e3536342c31382e3632372c31352e3637372c32362e393639682e6104c08301527f30323263382e3530332c372e3030352c32302e3231332c31332e3436332c33346104e08301527f2e3532342c31392e3135392c392e3939392c332e3939312c32312e3236392c376105008301527f2e3630392c33332e3539372c31302e3738382c33362e34352c392e3430372c386105208301527f322e3138312c31352e3030322c3133312e3833352c31352e3030327339352e336105408301527f36332d352e3539352c3133312e3830372d31352e3030326331302e3834372d326105608301527f2e37392c32302e3836372d352e3932362c32392e3932342d392e3334392c312e6105808301527f3234342d2e3436372c322e3437332d2e3934322c332e3637332d312e3432342c6105a08301527f31342e3332362d352e3639362c32362e3033352d31322e3136312c33342e35326105c08301527f342d31392e313733682e3032326331302e3131342d382e3334322c31352e36376105e08301527f372d31372e3433332c31352e3637372d32362e3936392c302d31372e3536322d6106008301527f31382e3836392d33332e3636352d35302e3232332d34362e3135222f3e3c70616106208301527f746820643d226d3133342e33362c3539322e373263302c33392e3733352c39366106408301527f2e3535342c37312e3932312c3231352e3635322c37312e393231733231352e366106608301527f32392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c696e656106808301527f2078313d223133342e3336222079313d223539322e3732222078323d223133346106a08301527f2e3336222079323d223533382e373937222f3e3c6c696e652078313d223536356106c08301527f2e3634222079313d223539322e3732222078323d223536352e3634222079323d6106e08301527f223533382e373937222f3e3c706f6c796c696e6520706f696e74733d223438316107008301527f2e383232203438312e393031203438312e373938203438312e383737203438316107208301527f2e373735203438312e383534203335302e303135203335302e303236203231386107408301527f2e313835203231382e313239222f3e3c706f6c796c696e6520706f696e74733d6107608301527f223231382e313835203438312e393031203231382e323331203438312e3835346107808301527f203335302e303135203335302e303236203438312e383232203231382e3135326107a08301527f222f3e3c2f673e000000000000000000000000000000000000000000000000006107c0830152604051998a957f3c672069643d22486f7572676c617373223e00000000000000000000000000006020880152603295612df58151809260208a8c019101614825565b8701612e0a8251809360208a85019101614825565b01612e1e8251809360208985019101614825565b01612e328251809360208885019101614825565b01612e468251809360208785019101614825565b01918201520360168101865201846148de565b6040519e8f9788977f3c646566733e000000000000000000000000000000000000000000000000000060208a0152612e9e6026998260208c9451948593019101614825565b8901612eb38251809360208c85019101614825565b01612ec78251809360208b85019101614825565b01612edb8251809360208a85019101614825565b01612eef8251809360208985019101614825565b01612f038251809360208885019101614825565b01612f178251809360208785019101614825565b019182015203600d8101895201876148de565b6137bd604c60c08301516101208401519361351961314c6040602084015193015196612f568186615984565b9461314761012b604051612f69816148c2565b600581527f2d3130302500000000000000000000000000000000000000000000000000000060208201526040519889917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152612fd3815180926020603787019101614825565b7f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666683820160378101919091527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015282519261311791849161012090910190602001614825565b6a1e17ba32bc3a2830ba341f60a91b90830190910161012081019190915281900361010b810190915201876148de565b615984565b9561332b61012b60405161315f816148c2565b600281527f30250000000000000000000000000000000000000000000000000000000000006020820152604051998a917f3c74657874506174682073746172744f66667365743d2200000000000000000060208401526131c9815180926020603787019101614825565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015261330682518093602061012085019101614825565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b81018a5201886148de565b61333581846159ec565b9261351461012b604051613348816148c2565b600481527f2d3530250000000000000000000000000000000000000000000000000000000060208201526040519687917f3c74657874506174682073746172744f66667365743d2200000000000000000060208401526133b2815180926020603787019101614825565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201526134ef82518093602061012085019101614825565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101875201856148de565b6159ec565b906136f861012b60405161352c816148c2565b600381527f353025000000000000000000000000000000000000000000000000000000000060208201526040519485917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152613596815180926020603787019101614825565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201526136d382518093602061012085019101614825565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101855201836148de565b6040519586937f3c7465787420746578742d72656e646572696e673d226f7074696d697a65537060208601527f656564223e000000000000000000000000000000000000000000000000000000604086015261375e815180926020604589019101614825565b8401613774825180936020604585019101614825565b01613789825180936020604585019101614825565b0161379e825180936020604585019101614825565b01661e17ba32bc3a1f60c91b604582015203602c8101845201826148de565b613a9d61019c60e0840151610140850151906137fe6137f86137f26137ec60806101a08b01519a015194614b07565b94614b07565b97614b07565b91614b07565b956040519687937f3c75736520687265663d2223476c6f77222066696c6c2d6f7061636974793d2260208601527f2e39222f3e00000000000000000000000000000000000000000000000000000060408601527f3c75736520687265663d2223476c6f772220783d22313030302220793d22313060458601527f3030222066696c6c2d6f7061636974793d222e39222f3e00000000000000000060658601527f3c75736520687265663d22234c6f676f2220783d223137302220793d22313730607c8601527f22207472616e73666f726d3d227363616c65282e3629222f3e3c757365206872609c8601527f65663d2223486f7572676c6173732220783d223135302220793d22393022207460bc8601527f72616e73666f726d3d22726f746174652831302922207472616e73666f726d2d60dc8601527f6f726967696e3d2235303020353030222f3e000000000000000000000000000060fc8601527f3c75736520687265663d222350726f67726573732220783d220000000000000061010e86015261012790613999815180926020858a019101614825565b8501937f2220793d22373930222f3e00000000000000000000000000000000000000000080948180948801527f3c75736520687265663d22235374617475732220783d2200000000000000000061013288015261014996613a038251809360208b85019101614825565b01958601527f3c75736520687265663d222353747265616d65642220783d220000000000000061015486015261016d94613a468251809360208985019101614825565b01938401527f3c75736520687265663d22234475726174696f6e2220783d220000000000000061017884015261019192613a898251809360208785019101614825565b01918201520361017c8101855201836148de565b6040519586937f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208601527f30302f737667222077696474683d223130303022206865696768743d2231303060408601527f30222076696577426f783d2230203020313030302031303030223e00000000006060860152613b29815180926020607b89019101614825565b8401613b3f825180936020607b85019101614825565b01613b54825180936020607b85019101614825565b01613b69825180936020607b85019101614825565b017f3c2f7376673e0000000000000000000000000000000000000000000000000000607b8201520360618101845201826148de565b6101405260a05160e0516040517fb971302a0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa908115614302576000916142b7575b6142b361424c614151614242609487613d396089613c178a614c57565b9260a0608001516040519485927f5b7b2274726169745f74797065223a224173736574222c2276616c7565223a226020850152613c5e815180926020604088019101614825565b8301907f227d2c7b2274726169745f74797065223a2253656e646572222c2276616c756560408301527f223a22000000000000000000000000000000000000000000000000000000000091826060820152613cc3825180936020606385019101614825565b01907f227d2c7b2274726169745f74797065223a22537461747573222c2276616c756560638301526083820152613d04825180936020608685019101614825565b017f227d5d000000000000000000000000000000000000000000000000000000000060868201520360698101845201826148de565b6101a05160a05161403b61017e613d51602435614b07565b936080800151613d6b6001600160a01b0360805116614c57565b90604051968793613f2860208601987f54686973204e465420726570726573656e74732061207061796d656e742073748a527f7265616d20696e2061205361626c696572205632200000000000000000000000604088015282516020840190613dd88160558b0184614825565b8801947f20636f6e74726163742e20546865206f776e6572206f662074686973204e465460558701527f2063616e207769746864726177207468652073747265616d656420617373657460758701527f732c207768696368206172652064656e6f6d696e6174656420696e2000000000609587015282516020840196613e628260b183018a614825565b017f2e5c6e5c6e2d2053747265616d2049443a20000000000000000000000000000060b1820152613e9d82518093602060c385019101614825565b01613ed67f5c6e2d2000000000000000000000000000000000000000000000000000000000958660c384015251809360c7840190614825565b01947f20416464726573733a2000000000000000000000000000000000000000000000958660c7820152613f1482518093602060d185019101614825565b019260d184015251809360d5840190614825565b019060d5820152613f4382518093602060df85019101614825565b017f5c6e5c6e0000000000000000000000000000000000000000000000000000000060df8201527fe29aa0efb88f205741524e494e473a205472616e7366657272696e672074686560e38201527f204e4654206d616b657320746865206e6577206f776e657220746865207265636101038201527f697069656e74206f66207468652073747265616d2e205468652066756e6473206101238201527f617265206e6f74206175746f6d61746963616c6c792077697468647261776e206101438201527f666f72207468652070726576696f757320726563697069656e742e00000000006101638201520361015e8101855201836148de565b6101a051906141ac61404e602435614b07565b916140cd602d604051809560208201976a029b0b13634b2b9102b19160ad1b8952614083815180926020602b87019101614825565b82017f2023000000000000000000000000000000000000000000000000000000000000602b8201526140be8251809360208785019101614825565b0103600d8101865201846148de565b610140516140da90614993565b94604051998a977f7b2261747472696275746573223a00000000000000000000000000000000000060208a015261411b815180926020602e8d019101614825565b8801917f2c226465736372697074696f6e223a2200000000000000000000000000000000602e840152518093603e840190614825565b01917f222c2265787465726e616c5f75726c223a2268747470733a2f2f7361626c6965603e8401527f722e636f6d222c226e616d65223a220000000000000000000000000000000000605e840152518093606d840190614825565b017f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261606d8201527f736536342c000000000000000000000000000000000000000000000000000000608d82015261420d825180936020609285019101614825565b017f227d00000000000000000000000000000000000000000000000000000000000060928201520360748101845201826148de565b60c0819052614993565b61429f603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261428f8151809260208686019101614825565b810103601d8101845201826148de565b604051918291602083526020830190614848565b0390f35b90506020813d6020116142fa575b816142d2602093836148de565b810103126142f55751906001600160a01b03821682036142f55790614151613bfa565b600080fd5b3d91506142c5565b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b6040518061012081011067ffffffffffffffff6101208301111761430e57610120810160405260f881527f3c7061746820643d226d3438312e34362c3530342e3130317635382e3434396360208201527f2d322e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e60408201527f332c382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d60608201527f35332e362c302d3130312e32342d362e33332d3133312e34372d31362e31367660808201527f2d35382e343339683236322e39325a222066696c6c3d2275726c282353616e6460a08201527f426f74746f6d29222f3e3c656c6c697073652063783d22333530222063793d2260c08201527f3530342e313031222072783d223133312e343632222072793d2232382e31303860e08201527f222066696c6c3d2275726c282353616e64546f7029222f3e0000000000000000610100820152996123de565b604051806101c081011067ffffffffffffffff6101c08301111761430e576101c0810160405261019981527f3c706f6c79676f6e20706f696e74733d22333530203335302e3032362034313560208201527f2e3033203238342e39373820323835203238342e39373820333530203335302e60408201527f303236222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7060608201527f61746820643d226d3431362e3334312c3238312e39373563302c2e3931342d2e60808201527f3335342c312e3830392d312e3033352c322e36382d352e3534322c372e30373660a08201527f2d33322e3636312c31322e34352d36352e32382c31322e34352d33322e36323460c08201527f2c302d35392e3733382d352e3337342d36352e32382d31322e34352d2e36383160e08201527f2d2e3837322d312e3033352d312e3736372d312e3033352d322e36382c302d2e6101008201527f3931342e3335342d312e3830382c312e3033352d322e3637362c352e3534322d6101208201527f372e3037362c33322e3635362d31322e34352c36352e32382d31322e34352c336101408201527f322e3631392c302c35392e3733382c352e3337342c36352e32382c31322e34356101608201527f2e3638312e3836372c312e3033352c312e3736322c312e3033352c322e3637366101808201527f5a222066696c6c3d2275726c282353616e64546f7029222f3e000000000000006101a082015299612191565b6146cc9198506146b861584f565b906020815191012090602081519101201490565b9638611d39565b905093610d64565b905094610a2f565b60d09461072c565b61470d915060203d602011614713575b61470581836148de565b810190614928565b386104e0565b503d6146fb565b614733915060203d6020116147135761470581836148de565b38610489565b634e487b7160e01b600052601260045260246000fd5b61477291925060203d602011614779575b61476a81836148de565b810190614900565b903861023d565b503d614760565b614799915060203d6020116147795761476a81836148de565b386101d2565b506020813d6020116147d4575b816147b9602093836148de565b810103126142f5575160058110156142f5576101779061016d565b3d91506147ac565b90506020813d60201161481d575b816147f7602093836148de565b810103126142f557516001600160a01b03811681036142f5576001600160a01b036100ff565b3d91506147ea565b60005b8381106148385750506000910152565b8181015183820152602001614828565b9060209161486181518092818552858086019101614825565b601f01601f1916010190565b610140810190811067ffffffffffffffff82111761430e57604052565b6020810190811067ffffffffffffffff82111761430e57604052565b6060810190811067ffffffffffffffff82111761430e57604052565b6040810190811067ffffffffffffffff82111761430e57604052565b90601f8019910116810190811067ffffffffffffffff82111761430e57604052565b908160209103126142f557516fffffffffffffffffffffffffffffffff811681036142f55790565b908160209103126142f5575164ffffffffff811681036142f55790565b67ffffffffffffffff811161430e57601f01601f191660200190565b9061496b82614945565b61497860405191826148de565b8281528092614989601f1991614945565b0190602036910137565b805115614af3576040516149a6816148a6565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408201528151600292838201809211614add5760038092047f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103614add57614a40908594951b614961565b936020850193829183518401925b838110614a8c5750505050510680600114614a7957600214614a6e575090565b603d90600019015390565b50603d9081600019820153600119015390565b85600491979293949701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c1688010151888501531685010151878201530195929190614a4e565b634e487b7160e01b600052601160045260246000fd5b50604051614b008161488a565b6000815290565b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000080821015614c49575b506d04ee2d6d415b85acef810000000080831015614c3a575b50662386f26fc1000080831015614c2b575b506305f5e10080831015614c1c575b5061271080831015614c0d575b506064821015614bfd575b600a80921015614bf3575b600190816021614b9e828701614961565b95860101905b614bb0575b5050505090565b600019019083907f30313233343536373839616263646566000000000000000000000000000000008282061a835304918215614bee57919082614ba4565b614ba9565b9160010191614b8d565b9190606460029104910191614b82565b60049193920491019138614b77565b60089193920491019138614b6a565b60109193920491019138614b5b565b60209193920491019138614b49565b604093508104915038614b30565b6001600160a01b031660405190614c6d826148a6565b602a8252602082016040368237825115614d8557603090538151600190811015614d8557607860218401536029905b808211614d0a575050614cac5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015614d70577f3031323334353637383961626364656600000000000000000000000000000000901a614d468486614d9b565b5360041c918015614d5b576000190190614c9c565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b634e487b7160e01b600052603260045260246000fd5b908151811015614d85570160200190565b60405190614db9826148c2565b600482527f2667743b000000000000000000000000000000000000000000000000000000006020830152565b60405190614df2826148c2565b600482527f266c743b000000000000000000000000000000000000000000000000000000006020830152565b90614e86929493604051958692602094614e4081518092888089019101614825565b8401614e5482518093888085019101614825565b01614e6782518093878085019101614825565b01614e7a82518093868085019101614825565b010380855201836148de565b565b80156151995760009180615174575090505b6001908082811015614f0757505050614eb1614de5565b614f04602260405183614ece829551809260208086019101614825565b81017f203100000000000000000000000000000000000000000000000000000000000060208201520360028101845201826148de565b90565b66038d7ea4c6800011156151175760409081519060a0820182811067ffffffffffffffff82111761430e57808452614f3e8161488a565b600081528252825190614f50826148c2565b8482526020917f4b0000000000000000000000000000000000000000000000000000000000000083820152828401528351614f8a816148c2565b8581527f4d0000000000000000000000000000000000000000000000000000000000000083820152848401528351614fc1816148c2565b8581527f42000000000000000000000000000000000000000000000000000000000000008382015260608401528351614ff9816148c2565b8581527f54000000000000000000000000000000000000000000000000000000000000008382015260808401526000918583965b6150eb575b5084519461503f866148c2565b6007908187527f2623383830353b0000000000000000000000000000000000000000000000000083880152519560005b8281106150d857505050506150b96150bf917f20000000000000000000000000000000000000000000000000000000000000006027870152600886526150b4866148c2565b614b07565b91615743565b916005851015614d8557614f049460051b015192614e1e565b818101840151888201850152830161506f565b9591926103e89081851061510e57508680916064600a870406950493019661502d565b93929650615032565b5050615121614dac565b614f0460286040518361513e829551809260208086019101614825565b81017f203939392e39395400000000000000000000000000000000000000000000000060208201520360088101845201826148de565b600a0a918215615185575004614e9a565b80634e487b7160e01b602492526012600452fd5b50506040516151a7816148c2565b600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b620151809103048061523c57506151e9614de5565b614f04602660405183615206829551809260208086019101614825565b81017f203120446179000000000000000000000000000000000000000000000000000060208201520360068101845201826148de565b61270f811161530b57600181036152c857614f046020615290604051615261816148c2565b600481527f20446179000000000000000000000000000000000000000000000000000000008382015293614b07565b60405193816152a88693518092868087019101614825565b82016152bc82518093868085019101614825565b010380845201826148de565b614f0460206152906040516152dc816148c2565b600581527f20446179730000000000000000000000000000000000000000000000000000008382015293614b07565b50615314614dac565b614f04602a60405183615331829551809260208086019101614825565b81017f2039393939204461797300000000000000000000000000000000000000000000602082015203600a8101845201826148de565b6020818303126142f55780519067ffffffffffffffff82116142f5570181601f820112156142f557805161539a81614945565b926153a860405194856148de565b818452602082840101116142f557614f049160208085019101614825565b6001600160a01b031660409081516395d89b4160e01b8152600081600481855afa9081156155a05760009161557f575b5061545b8351615405816148c2565b601181527f5341422d56322d4c4f434b55502d4c494e0000000000000000000000000000006020918201528251908301207fc66b376a19264d832c1bc254000c18944ca5aa57ed50f4ea637c4da424d4c3bb1490565b156154995750505161546c816148c2565b600d81527f4c6f636b7570204c696e65617200000000000000000000000000000000000000602082015290565b6154fd83516154a7816148c2565b601181527f5341422d56322d4c4f434b55502d44594e0000000000000000000000000000006020918201528251908301207f6ab655856fa5352de8c05542b1937ac63c59342da992602767c02734cc5391651490565b1561553b5750505161550e816148c2565b600e81527f4c6f636b75702044796e616d6963000000000000000000000000000000000000602082015290565b61557b9083519384937f814a8a2e000000000000000000000000000000000000000000000000000000008552600485015260248401526044830190614848565b0390fd5b61559a913d8091833e61559281836148de565b810190615367565b386153f6565b83513d6000823e3d90fd5b3d156155d6573d906155bc82614945565b916155ca60405193846148de565b82523d6000602084013e565b606090565b60405160208101907f313ce56700000000000000000000000000000000000000000000000000000000825260048152615613816148c2565b6000928392839251915afa6156266155ab565b908061565d575b156156595760208180518101031261565557602001519060ff82168203615652575090565b80fd5b5080fd5b5090565b50602081511461562d565b6000809160405160208101906395d89b4160e01b82526004815261568b816148c2565b51915afa6156976155ab565b90158015615737575b6156fd57806020806156b793518301019101615367565b601e815111600014614f0457506040516156d0816148c2565b600b81527f4c6f6e672053796d626f6c000000000000000000000000000000000000000000602082015290565b5060405161570a816148c2565b600581527f4552433230000000000000000000000000000000000000000000000000000000602082015290565b506040815111156156a0565b806157555750604051614b008161488a565b600a8110156157ba5761576790614b07565b614f04602260405180937f2e3000000000000000000000000000000000000000000000000000000000000060208301526157aa8151809260208686019101614825565b81010360028101845201826148de565b6157c390614b07565b614f04602160405180937f2e0000000000000000000000000000000000000000000000000000000000000060208301526158068151809260208686019101614825565b81010360018101845201826148de565b60405190615823826148c2565b600782527f536574746c6564000000000000000000000000000000000000000000000000006020830152565b6040519061585c826148c2565b600882527f4465706c657465640000000000000000000000000000000000000000000000006020830152565b600581101561596e57600481036158a25750614f0461584f565b600381036158e457506040516158b7816148c2565b600881527f43616e63656c6564000000000000000000000000000000000000000000000000602082015290565b6001810361592657506040516158f9816148c2565b600981527f53747265616d696e670000000000000000000000000000000000000000000000602082015290565b60020361593557614f04615816565b604051615941816148c2565b600781527f50656e64696e6700000000000000000000000000000000000000000000000000602082015290565b634e487b7160e01b600052602160045260246000fd5b6030614e869193929360405194816159a6879351809260208087019101614825565b820164010714051160dd1b60208201526a029b0b13634b2b9102b19160ad1b60258201526159dd8251809360208785019101614825565b010360108101855201836148de565b6025614e86919392936040519481615a0e879351809260208087019101614825565b820164010714051160dd1b6020820152615a318251809360208785019101614825565b010360058101855201836148de565b60405190615a4d826148c2565b601082527f68736c283233302c3231252c31312529000000000000000000000000000000006020830152565b8015615cab57615a87615a40565b90612710908103908111614add57614f0491615aa561013692614b07565b6040519485927f3c672066696c6c3d226e6f6e65223e000000000000000000000000000000000060208501527f3c636972636c652063783d22313636222063793d2235302220723d2232322220602f8501527f7374726f6b653d22000000000000000000000000000000000000000000000000604f850152615b31815180926020605788019101614825565b83017f22207374726f6b652d77696474683d223130222f3e000000000000000000000060578201527f3c636972636c652063783d22313636222063793d2235302220706174684c656e606c8201527f6774683d2231303030302220723d22323222207374726f6b653d220000000000608c820152615bb982518093602060a785019101614825565b017f22207374726f6b652d6461736861727261793d22313030303022207374726f6b60a78201527f652d646173686f66667365743d2200000000000000000000000000000000000060c7820152615c1a82518093602060d585019101614825565b017f22207374726f6b652d6c696e656361703d22726f756e6422207374726f6b652d60d58201527f77696474683d223522207472616e73666f726d3d22726f74617465282d39302960f58201527f22207472616e73666f726d2d6f726967696e3d22313636203530222f3e000000610115820152631e17b39f60e11b610132820152036101168101845201826148de565b5050604051614b008161488a565b60009080518015615d2e579060009182915b818310615cdd57505050600d02900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615d108785614d9b565b511614615d26575b600d01936001019190615ccb565b849350615d18565b505050600090565b60009080518015615d2e579060009182915b818310615d5a5750505060041b900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615d8d8785614d9b565b511614615da3575b601001936001019190615d48565b849350615d9556"; /*////////////////////////////////////////////////////////////////////////// DEPLOYERS diff --git a/test/utils/Precompiles.t.sol b/test/utils/Precompiles.t.sol index 02a95f874..abc5558ab 100644 --- a/test/utils/Precompiles.t.sol +++ b/test/utils/Precompiles.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.8.19 <=0.9.0; +pragma solidity >=0.8.19 <0.9.0; import { LibString } from "solady/utils/LibString.sol";