@superfluid-finance/ethereum-contracts 1.2.3-dev.f94fdbb.0 → 1.3.1-dev.70e7fff.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/contracts/AccessControl.json +3 -3
- package/build/contracts/AccessControlEnumerable.json +3 -3
- package/build/contracts/Address.json +5 -5
- package/build/contracts/AgreementBase.json +13 -13
- package/build/contracts/AgreementLibrary.json +7 -7
- package/build/contracts/BaseRelayRecipient.json +5 -5
- package/build/contracts/BatchLiquidator.json +179 -179
- package/build/contracts/BatchOperation.json +5 -5
- package/build/contracts/CFAv1Library.json +5 -5
- package/build/contracts/CallUtils.json +7 -7
- package/build/contracts/ClosingOnUpdateFlowTestApp.json +2107 -1917
- package/build/contracts/ConstantFlowAgreementV1.json +8 -8
- package/build/contracts/Context.json +3 -3
- package/build/contracts/ContextDefinitions.json +5 -5
- package/build/contracts/Create2.json +5 -5
- package/build/contracts/CustomSuperTokenBase.json +3 -3
- package/build/contracts/ERC165.json +3 -3
- package/build/contracts/ERC1820Implementer.json +5 -5
- package/build/contracts/ERC1820RegistryCompiled.json +7 -7
- package/build/contracts/ERC20.json +5 -5
- package/build/contracts/ERC20Burnable.json +3 -3
- package/build/contracts/ERC20Pausable.json +3 -3
- package/build/contracts/ERC20PresetMinterPauser.json +5 -5
- package/build/contracts/ERC20WithTokenInfo.json +3 -3
- package/build/contracts/ERC777Helper.json +7 -7
- package/build/contracts/ERC777RecipientDrainingGas.json +839 -839
- package/build/contracts/ERC777RecipientReverting.json +839 -839
- package/build/contracts/EnumerableSet.json +5 -5
- package/build/contracts/EventsEmitter.json +47 -47
- package/build/contracts/ExclusiveInflowTestApp.json +2107 -1917
- package/build/contracts/FixedSizeData.json +213 -213
- package/build/contracts/FlowExchangeTestApp.json +2107 -1917
- package/build/contracts/FlowOperatorDefinitions.json +5 -5
- package/build/contracts/FullUpgradableSuperTokenProxy.json +226 -312
- package/build/contracts/IAccessControl.json +3 -3
- package/build/contracts/IAccessControlEnumerable.json +3 -3
- package/build/contracts/IConstantFlowAgreementV1.json +451 -444
- package/build/contracts/IDAv1Library.json +5 -5
- package/build/contracts/IERC165.json +3 -3
- package/build/contracts/IERC1820Implementer.json +3 -3
- package/build/contracts/IERC1820Registry.json +3 -3
- package/build/contracts/IERC20.json +3 -3
- package/build/contracts/IERC20Metadata.json +3 -3
- package/build/contracts/IERC777.json +3 -3
- package/build/contracts/IERC777Recipient.json +3 -3
- package/build/contracts/IERC777Sender.json +3 -3
- package/build/contracts/IInstantDistributionAgreementV1.json +570 -559
- package/build/contracts/IMaticBridgedNativeSuperToken.json +71 -32
- package/build/contracts/IMaticBridgedNativeSuperTokenCustom.json +3 -3
- package/build/contracts/IMultiSigWallet.json +3 -3
- package/build/contracts/IPureSuperToken.json +71 -32
- package/build/contracts/IPureSuperTokenCustom.json +3 -3
- package/build/contracts/IRelayRecipient.json +3 -3
- package/build/contracts/IResolver.json +3 -3
- package/build/contracts/ISETH.json +71 -32
- package/build/contracts/ISETHCustom.json +3 -3
- package/build/contracts/ISuperAgreement.json +3 -3
- package/build/contracts/ISuperApp.json +179 -173
- package/build/contracts/ISuperToken.json +522 -483
- package/build/contracts/ISuperTokenFactory.json +3 -3
- package/build/contracts/ISuperfluid.json +633 -628
- package/build/contracts/ISuperfluidGovernance.json +134 -133
- package/build/contracts/ISuperfluidToken.json +403 -394
- package/build/contracts/ITOGAv1.json +1211 -1211
- package/build/contracts/ITOGAv2.json +1211 -1211
- package/build/contracts/Initializable.json +3 -3
- package/build/contracts/InstantDistributionAgreementV1.json +10 -10
- package/build/contracts/MaticBridgedNativeSuperTokenProxy.json +194 -194
- package/build/contracts/NonClosableOutflowTestApp.json +2107 -1917
- package/build/contracts/Ownable.json +3 -3
- package/build/contracts/Pausable.json +3 -3
- package/build/contracts/Proxy.json +3 -3
- package/build/contracts/PureSuperToken.json +91 -91
- package/build/contracts/Resolver.json +96 -96
- package/build/contracts/SETHProxy.json +199 -199
- package/build/contracts/SafeCast.json +5 -5
- package/build/contracts/SafeERC20.json +5 -5
- package/build/contracts/SafeMath.json +5 -5
- package/build/contracts/SelfDeletingFlowTestApp.json +2107 -1917
- package/build/contracts/SlotsBitmapLibrary.json +7 -7
- package/build/contracts/Strings.json +5 -5
- package/build/contracts/SuperAppBase.json +3 -3
- package/build/contracts/SuperAppDefinitions.json +5 -5
- package/build/contracts/SuperToken.json +2262 -2262
- package/build/contracts/SuperTokenFactory.json +582 -582
- package/build/contracts/SuperTokenFactoryBase.json +576 -576
- package/build/contracts/SuperTokenFactoryHelper.json +578 -578
- package/build/contracts/SuperUpgrader.json +687 -687
- package/build/contracts/Superfluid.json +6648 -6678
- package/build/contracts/SuperfluidFrameworkDeployer.json +526 -526
- package/build/contracts/SuperfluidGovernanceBase.json +13 -13
- package/build/contracts/SuperfluidGovernanceConfigs.json +5 -5
- package/build/contracts/SuperfluidGovernanceII.json +21 -21
- package/build/contracts/SuperfluidGovernanceIIProxy.json +20 -20
- package/build/contracts/SuperfluidLoader.json +147 -147
- package/build/contracts/SuperfluidToken.json +1269 -1269
- package/build/contracts/TOGA.json +1221 -1221
- package/build/contracts/TestGovernance.json +315 -315
- package/build/contracts/TestToken.json +475 -561
- package/build/contracts/TokenCustodian.json +220 -220
- package/build/contracts/TokenInfo.json +3 -3
- package/build/contracts/UUPSProxiable.json +136 -136
- package/build/contracts/UUPSProxy.json +87 -87
- package/build/contracts/UUPSUtils.json +43 -43
- package/build/contracts-sizes.txt +6 -6
- package/contracts/agreements/AgreementBase.sol +1 -1
- package/contracts/agreements/AgreementLibrary.sol +1 -1
- package/contracts/agreements/ConstantFlowAgreementV1.sol +1 -1
- package/contracts/agreements/InstantDistributionAgreementV1.sol +1 -1
- package/contracts/gov/SuperfluidGovernanceBase.sol +1 -1
- package/contracts/gov/SuperfluidGovernanceII.sol +1 -1
- package/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol +7 -10
- package/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol +11 -18
- package/contracts/interfaces/superfluid/ISuperApp.sol +7 -9
- package/contracts/interfaces/superfluid/ISuperToken.sol +36 -44
- package/contracts/interfaces/superfluid/ISuperfluid.sol +17 -21
- package/contracts/interfaces/superfluid/ISuperfluidGovernance.sol +1 -1
- package/contracts/interfaces/superfluid/ISuperfluidToken.sol +13 -14
- package/contracts/libs/BaseRelayRecipient.sol +1 -1
- package/contracts/libs/CallUtils.sol +1 -1
- package/contracts/libs/ERC1820RegistryCompiled.sol +1 -1
- package/contracts/libs/ERC777Helper.sol +1 -1
- package/contracts/libs/EventsEmitter.sol +2 -2
- package/contracts/libs/FixedSizeData.sol +2 -2
- package/contracts/libs/SlotsBitmapLibrary.sol +1 -1
- package/contracts/mocks/AgreementMock.sol +1 -1
- package/contracts/mocks/CFAAppMocks.sol +6 -6
- package/contracts/mocks/CFALibraryMock.sol +2 -2
- package/contracts/mocks/CallUtilsMock.sol +1 -1
- package/contracts/mocks/CallUtilsTester.sol +1 -1
- package/contracts/mocks/CustomSuperTokenMock.sol +1 -1
- package/contracts/mocks/ERC777SenderRecipientMock.sol +1 -1
- package/contracts/mocks/FakeSuperfluidMock.sol +1 -1
- package/contracts/mocks/ForwarderMock.sol +1 -1
- package/contracts/mocks/IDASuperAppTester.sol +2 -2
- package/contracts/mocks/IDAv1LibraryMock.sol +3 -3
- package/contracts/mocks/MockSmartWallet.sol +1 -1
- package/contracts/mocks/MultiFlowTesterApp.sol +2 -2
- package/contracts/mocks/SuperAppMocks.sol +15 -12
- package/contracts/mocks/SuperTokenFactoryMock.sol +1 -1
- package/contracts/mocks/SuperTokenMock.sol +1 -1
- package/contracts/mocks/SuperfluidDestructorMock.sol +1 -1
- package/contracts/mocks/SuperfluidGovernanceIIMock.sol +1 -1
- package/contracts/mocks/SuperfluidMock.sol +2 -2
- package/contracts/mocks/UUPSProxiableMock.sol +1 -1
- package/contracts/superfluid/FullUpgradableSuperTokenProxy.sol +2 -2
- package/contracts/superfluid/SuperToken.sol +1 -1
- package/contracts/superfluid/SuperTokenFactory.sol +1 -1
- package/contracts/superfluid/Superfluid.sol +4 -4
- package/contracts/superfluid/SuperfluidToken.sol +1 -1
- package/contracts/tokens/MaticBridgedNativeSuperToken.sol +1 -1
- package/contracts/tokens/PureSuperToken.sol +1 -1
- package/contracts/tokens/SETH.sol +1 -1
- package/contracts/upgradability/UUPSProxiable.sol +1 -1
- package/contracts/upgradability/UUPSProxy.sol +1 -1
- package/contracts/upgradability/UUPSUtils.sol +1 -1
- package/contracts/utils/BatchLiquidator.sol +1 -1
- package/contracts/utils/Resolver.sol +1 -1
- package/contracts/utils/SuperUpgrader.sol +6 -6
- package/contracts/utils/SuperfluidLoader.sol +1 -1
- package/contracts/utils/TOGA.sol +1 -1
- package/contracts/utils/TestGovernance.sol +2 -2
- package/contracts/utils/TestToken.sol +2 -2
- package/contracts/utils/TokenCustodian.sol +1 -1
- package/package.json +5 -3
- package/scripts/deploy-framework.js +5 -5
- package/scripts/deploy-super-token.js +13 -4
- package/scripts/gov-create-new-app-registration-key.js +2 -1
- package/scripts/gov-create-new-factory-registration.js +1 -1
- package/scripts/gov-set-trusted-forwarder.js +77 -0
- package/scripts/info-show-protocol.js +28 -12
- package/scripts/libs/getConfig.js +21 -3
- package/scripts/resolver-list-super-token.js +1 -0
|
@@ -1022,9 +1022,9 @@
|
|
|
1022
1022
|
"type": "function"
|
|
1023
1023
|
}
|
|
1024
1024
|
],
|
|
1025
|
-
"metadata": "{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ISuperfluid\",\"name\":\"host\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"uuid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"codeAddress\",\"type\":\"address\"}],\"name\":\"CodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IndexDistributionClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexSubscribed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUnitsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUnsubscribed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldIndexValue\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newIndexValue\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"totalUnitsPending\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"totalUnitsApproved\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SubscriptionDistributionClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionUnitsUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SLOTS_BITMAP_LIBRARY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"agreementType\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"approveSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateDistribution\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"actualAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"newIndexValue\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"createIndex\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"deleteSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"distribute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCodeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"codeAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"}],\"name\":\"getIndex\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"indexValue\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalUnitsApproved\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalUnitsPending\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"getSubscription\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"pendingDistribution\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"agreementId\",\"type\":\"bytes32\"}],\"name\":\"getSubscriptionByID\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"pendingDistribution\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"listSubscriptions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"publishers\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"indexIds\",\"type\":\"uint32[]\"},{\"internalType\":\"uint128[]\",\"name\":\"unitsList\",\"type\":\"uint128[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"realtimeBalanceOf\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"dynamicBalance\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedDeposit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"revokeSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"updateCode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"indexValue\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"updateIndex\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"updateSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Superfluid\",\"details\":\"Please read IInstantDistributionAgreementV1 for implementation notes.For more technical notes, please visit protocol-monorepo wiki area.\",\"kind\":\"dev\",\"methods\":{\"agreementType()\":{\"details\":\"ISuperAgreement.agreementType implementation\"},\"approveSubscription(address,address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.approveSubscription implementation\"},\"calculateDistribution(address,address,uint32,uint256)\":{\"details\":\"IInstantDistributionAgreementV1.calculateDistribution implementation\"},\"claim(address,address,uint32,address,bytes)\":{\"details\":\"Claim pending distributions\",\"params\":{\"ctx\":\"Context bytes (see ISuperfluid.sol for Context struct) The subscription should not be approved yet # App callbacks - AgreementUpdated callback to the publisher: - agreementId is for the subscription\",\"indexId\":\"Id of the index\",\"publisher\":\"The publisher of the index\",\"subscriber\":\"The subscriber's address\",\"token\":\"Super token address\"}},\"createIndex(address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.createIndex implementation\"},\"deleteSubscription(address,address,uint32,address,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.deleteSubscription implementation\"},\"distribute(address,uint32,uint256,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.distribute implementation\"},\"getCodeAddress()\":{\"details\":\"Get current implementation code address.\"},\"getIndex(address,address,uint32)\":{\"details\":\"IInstantDistributionAgreementV1.getIndex implementation\"},\"getSubscription(address,address,uint32,address)\":{\"details\":\"IInstantDistributionAgreementV1.getSubscription implementation\"},\"getSubscriptionByID(address,bytes32)\":{\"details\":\"IInstantDistributionAgreementV1.getSubscriptionByID implementation\"},\"listSubscriptions(address,address)\":{\"details\":\"IInstantDistributionAgreementV1.listSubscriptions implementation\"},\"proxiableUUID()\":{\"details\":\"Proxiable UUID marker function, this would help to avoid wrong logic contract to be used for upgrading. NOTE: The semantics of the UUID deviates from the actual UUPS standard, where it is equivalent of _IMPLEMENTATION_SLOT.\"},\"realtimeBalanceOf(address,address,uint256)\":{\"details\":\"ISuperAgreement.realtimeBalanceOf implementation\"},\"revokeSubscription(address,address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.revokeSubscription implementation\"},\"updateIndex(address,uint32,uint128,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.updateIndex implementation\"},\"updateSubscription(address,uint32,address,uint128,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.updateSubscription implementation\"}},\"stateVariables\":{\"_MAX_NUM_SUBS\":{\"details\":\"Maximum number of subscriptions a subscriber can have\"},\"_PUBLISHER_DEPOSIT_STATE_SLOT_ID\":{\"details\":\"Publisher state slot id for storing its deposit amount\"},\"_SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID\":{\"details\":\"Subscriber state slot id for storing subs bitmap\"},\"_SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START\":{\"details\":\"Subscriber state slot id starting ptoint for subscription data\"},\"_UNALLOCATED_SUB_ID\":{\"details\":\"A special id that indicating the subscription is not approved yet\"}},\"title\":\"InstantDistributionAgreementV1 contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/agreements/InstantDistributionAgreementV1.sol\":\"InstantDistributionAgreementV1\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x4823752b07b8ea4ca971b217e39457930e7cb103c2c91e2a29729e5ca907e4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f319af26a9ade3e6cf3698bf1b84aa6213bdd7a76606ea9ba56ced163593934\",\"dweb:/ipfs/QmZ2u9zen5Htan4dSP1RZCY2XqB9HUwqkNCMzdn7aV2jWc\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC777/IERC777.sol\":{\"keccak256\":\"0xe4e0b7e3f0265ffaa565d26acd2d45f2633f19127ed625e5a05a9f201a87a667\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1762b5bc15a009b5f092ccf547b81e0827c8705884f18e0623e497658514a7ed\",\"dweb:/ipfs/QmTtmVQYuynan3j2uVjdjjRJS1mr7LPRgxSZNnfqC7oxkz\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x5c6caab697d302ad7eb59c234a4d2dbc965c1bae87709bd2850060b7695b28c7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb62abcee612c175f1b9bc70e5dfe5bd23473c99987ade6e80e291f68dc60ff1\",\"dweb:/ipfs/QmZCMajhG7FtRYNDwBchXN89mXR6HLPVzr9732qfUdNf9E\"]},\"project:/contracts/agreements/AgreementBase.sol\":{\"keccak256\":\"0xe59fc8bbe728c574773b5d3a3e9cfb4e8f323e9a3c3267a82d36fb79921b9997\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://0e21d969b3b996ab211eff83fa5bb7041614c0ac597c7479012c0fe625f4e15f\",\"dweb:/ipfs/QmWThBae9FCDgCAcco2bZicvsPq8vz5K1XW66hz3LXSK2V\"]},\"project:/contracts/agreements/AgreementLibrary.sol\":{\"keccak256\":\"0x107ee59e59b54e9ee85997d135a9bfc97979eda1143c7b1b61b63959777bff91\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://1a235f5a0fc7a04143662a69279d513d2434eeb7d60afdcc57911dcfeef712e5\",\"dweb:/ipfs/QmbUDhcf9mizwLxyCttibMxEM9NUun4guT3Sc9vdEaSxAv\"]},\"project:/contracts/agreements/InstantDistributionAgreementV1.sol\":{\"keccak256\":\"0x3a9509fe08ce669c554060aa045d36517695c8fd6f9c1ca651f89aebf78f329d\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://a9b091753795543953b4ca0e7d05242fe673c3b82ddc9e5bac691aba319f1be8\",\"dweb:/ipfs/QmPKTTVGrLbcsG8G92WK523DZLj7PxVknjxrvWt2TrTiuT\"]},\"project:/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol\":{\"keccak256\":\"0x47948789bc2265e6228f70ddd9eb194be4e35b1c5ce598f5b5a01fcb48def27b\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://d758b5560a735d8ab2175a2b76afe38f99bf170800917c4f0adae1f8862ad785\",\"dweb:/ipfs/QmXZToKtnJXmJq4hBqkwVAj6CYkG2DGbErt9G9T7sW4Zoe\"]},\"project:/contracts/interfaces/superfluid/Definitions.sol\":{\"keccak256\":\"0x199095781e4221b6015d859558da09977f79199f38d342ab4899c2cecdf8cec1\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://9fd3a5a8b16d8517e2af10e20390a9af5adbfa4e783e3a7dd89eb4588db98385\",\"dweb:/ipfs/QmPDtGR43DeMMVsHjUh7FYzMGsFKPpGriRkaahFpN5T5d3\"]},\"project:/contracts/interfaces/superfluid/ISuperAgreement.sol\":{\"keccak256\":\"0xc3a6a907245116bcecc70fe4b207454012e8ce4fa190228fb8bbe39e0b1bc5cf\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://83c116bdae48685d20e5a27c942111e685ec1ef6334e7ff6f6d9af66edbd8025\",\"dweb:/ipfs/QmTnVuNTaRFiDmkAmDk7NFYdfQTW1kqgBZiY2exC6k8jDx\"]},\"project:/contracts/interfaces/superfluid/ISuperApp.sol\":{\"keccak256\":\"0x57f4203168992c940eb6b8c7cc75f854cb36a1f9323b3f39ddc5e4fbe819c043\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://888941dfa3e5004f678f215b98a85d1bf54e412317928a78e0a1cff090773d4c\",\"dweb:/ipfs/QmVe838upcAyqpy1d3oQNHJrbRyWCKHL51zWrMKruvLxFG\"]},\"project:/contracts/interfaces/superfluid/ISuperToken.sol\":{\"keccak256\":\"0x3cb0b7216007b942f7611d7b3d983c0df9408fdd4fd6b799c33fc9033e0abf8b\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://17901a1fd3635f441671e14ece8ecc6806af20c5eb80cca3b7c6e53a51fef7b6\",\"dweb:/ipfs/QmUXXMfU6nmsyEnufyGEwyZ5M7pzpXNTr6vw32e3JjjoZp\"]},\"project:/contracts/interfaces/superfluid/ISuperTokenFactory.sol\":{\"keccak256\":\"0x68a466c978557e47bd7385b1d7d78f1c8fb07462a870efc5a791008e33a4f535\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://d109879bdb7f022560a792af2ff481df729bf1b4b8e1831b8022f4d12892d41d\",\"dweb:/ipfs/QmRSWqHq8CP5XWgyV4mJpPxMg33s312s2K5ndHRHVqqZ8n\"]},\"project:/contracts/interfaces/superfluid/ISuperfluid.sol\":{\"keccak256\":\"0x2d9b845469a35b66f1166406149ac85e933dbe9156f57e4a4078948e6a6e71a4\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://48e5cb11d4b90e42af521e23b33d57e12187c989d8d56be332b1649308168d45\",\"dweb:/ipfs/QmdaTW4HfpFfHjkHiJ3CmZUmCfLJyFCPTnCygwhiNhx3Tu\"]},\"project:/contracts/interfaces/superfluid/ISuperfluidGovernance.sol\":{\"keccak256\":\"0x2166f766b7f61f9bb1376b0948efa0d0c0046b93dc301e51ce495203b145189b\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://929630e6a15f523b142b2897783b2f7a54532ac5ae578bd17a0b7f25a6ca2bd8\",\"dweb:/ipfs/QmTu9ffH9qbQncJGEc24bmnoCGjifQ7BG47AYR8AzMLfXR\"]},\"project:/contracts/interfaces/superfluid/ISuperfluidToken.sol\":{\"keccak256\":\"0x518b869178aafffde40c654a1e24b3b1a2b5e42e5e8f17562556f404db8b9434\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://458ce84666b418fa3a7569c0e109db4d920fb6d1cb67ebc4c497c9c71107d93b\",\"dweb:/ipfs/QmV9nqhRF7MDGkV6UW3WWcqeXov2vmqHuRcvbqaaV8yP6u\"]},\"project:/contracts/interfaces/tokens/ERC20WithTokenInfo.sol\":{\"keccak256\":\"0x66708dae3fcd06e6fc0a46f2959fc2d1e6b9361f28598337339d26af8eb8c0f9\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://77b80718cec21b81ef190c19fb9fbe73913a95c71f7e6715f671bbe8a224dafc\",\"dweb:/ipfs/QmUdsc6DF2Bgih5VZm7sfaECjhGmwE7tAx8pMkzGQgVKQw\"]},\"project:/contracts/interfaces/tokens/TokenInfo.sol\":{\"keccak256\":\"0x70e573644a0ff271c0ccef526809e9d9ab4950ec58755ca84e833cde3b8f3df0\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://aea3709687cc37ba625f4cc882fbdb149a7bf5be5afe2b030203c8719641a77b\",\"dweb:/ipfs/QmVpvfR6ZheE5wNUK9CobaVBgVvEnEPkvjWF9cfwyZr7eQ\"]},\"project:/contracts/libs/SlotsBitmapLibrary.sol\":{\"keccak256\":\"0x8702dc0404f8b03c21b82e2144b1c1d8ca0c0b22986159985749d6d25eefb4c7\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://d16223a93a87019af0991d791c4ec2b9d4e80b87e2f2e0981848e4f015008e75\",\"dweb:/ipfs/QmarrBFqsszA65mmyySyfrpUHPvgDdBwUzyhnBZTEQSLwi\"]},\"project:/contracts/upgradability/UUPSProxiable.sol\":{\"keccak256\":\"0x5f50cec21a585dab7b59545aeb51735f36e3222e4b0768370be8d46373d0ef05\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://acdd57d81b5b2d346da335636baf1e37da3d31cf2eef58af493e43bc65a27414\",\"dweb:/ipfs/QmTepRBNAfRBXVDBM37ME1jpw1YgcseVehC17sWpEYeFDc\"]},\"project:/contracts/upgradability/UUPSUtils.sol\":{\"keccak256\":\"0xffec084e77ce3c0b595f0612687242f3d8b7a84cab15e5650c17428ee48d0b5b\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://be0183816467872b053562d9a737042ac3a91ea67e3c74e03de5db7226f3e73b\",\"dweb:/ipfs/QmUyi4YXh1T7MExbrLwZ6rAdXTPChF8q27YpZxxniR6CHM\"]}},\"version\":1}",
|
|
1026
|
-
"bytecode": "0x60a06040523480156200001157600080fd5b506040516200543c3803806200543c833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b6080516153a86200009460003960006110e201526153a86000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80637730599e116100ad578063acf4a6c211610071578063acf4a6c21461030d578063b6dacdb814610320578063b96731c214610342578063cd7245c514610355578063d787840a146103ad57600080fd5b80637730599e146102635780637fbc763914610289578063899baaec1461029c5780639b2e48bc146102cc578063acafa1b8146102fa57600080fd5b806346951954116100f457806346951954146101d957806350d75d25146101ee57806352d1902d146101f65780635b5340511461020c5780636041ae961461025057600080fd5b8063232d2b581461012657806323fc23f31461014f5780632e5e74c6146101935780633fd4176a146101a6575b600080fd5b6101396101343660046143f8565b6103c0565b60405161014691906144df565b60405180910390f35b61016261015d3660046144f2565b610ae2565b6040805194151585526001600160801b03938416602086015291831691840191909152166060820152608001610146565b6101396101a136600461453d565b610b4d565b6101c173__SlotsBitmapLibrary____________________81565b6040516001600160a01b039091168152602001610146565b6101ec6101e7366004614591565b6110d7565b005b6101c161115b565b6101fe61118a565b604051908152602001610146565b61021f61021a3660046145ae565b6111ee565b6040516101469493929190931515845291151560208401526001600160801b03166040830152606082015260800190565b61013961025e36600461460a565b6112c4565b7f8aedc3b5d4bf031e11a7e2940f7251c005698405d58e02e1c247fed3b1b3a6746101fe565b610139610297366004614685565b611718565b6102af6102aa3660046146c6565b611828565b604080519283526001600160801b03909116602083015201610146565b6102df6102da366004614717565b6118cc565b60408051938452602084019290925290820152606001610146565b61013961030836600461453d565b611ad7565b61013961031b36600461460a565b611f01565b61033361032e366004614758565b6124e1565b604051610146939291906147d5565b610139610350366004614872565b612736565b6103686103633660046148c7565b612836565b604080516001600160a01b03909616865263ffffffff9094166020860152911515928401929092526001600160801b039091166060830152608082015260a001610146565b6101396103bb3660046148f3565b612958565b60606001600160a01b0385166103f15760405162461bcd60e51b81526004016103e890614957565b60405180910390fd5b6103f9614250565b6104016142ae565b60606000806104468c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b90508060a00151925080606001519150506104658b828b8d6000612d03565b60808901521515602080890191909152606088019190915260408088018390529287528251908101909252600082526104a1918d918c91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050602086015191965050156105055764040000000060c08401526104fb8386612e43565b60a0850152610520565b64010000000060c084015261051a8386612e43565b60a08501525b8360200151801561053d575060808401515163ffffffff90811614155b156106185761058c8460800151608001516001600160801b0316896001600160801b03168660600151602001516001600160801b031661057d919061499a565b61058791906149b2565b612ffa565b6060850180516001600160801b03909216602090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518363ffffffff1660e01b81526004016105e19291906149f9565b600060405180830381600087803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b505050506107ff565b8360200151156106955761065d8460800151608001516001600160801b0316896001600160801b03168660600151604001516001600160801b031661057d919061499a565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518060a0016040528063ffffffff80168152602001826001600160a01b031681526020018b63ffffffff1681526020018560600151600001516001600160801b03168152602001896001600160801b031681525084608001819052508a6001600160a01b03166312a6a3f885604001516107148760800151613105565b6040518363ffffffff1660e01b81526004016107319291906149f9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50505050878460600151604001516107779190614a12565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916107af90613067565b6040518363ffffffff1660e01b81526004016107cc9291906149f9565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505b60008460800151608001516001600160801b031685608001516060015186606001516000015161082f9190614a3d565b6001600160801b03166108429190614a65565b905063ffffffff801685608001516000015163ffffffff16036108db576108728c8361086d84614aea565b6131ac565b6001600160a01b038c1663cf97256d8361088b84614aea565b6040518363ffffffff1660e01b81526004016108a8929190614b06565b600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050505b60405163cf97256d60e01b81526001600160a01b038d169063cf97256d90610909908d908590600401614b06565b600060405180830381600087803b15801561092357600080fd5b505af1158015610937573d6000803e3d6000fd5b505050508460200151156109dd5760608086015151608080880180516001600160801b039384169401939093528251918c16910152604086015190516001600160a01b038e169163a1b2bf8b9161098d90613105565b6040518363ffffffff1660e01b81526004016109aa9291906149f9565b600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b505050505b846020015115610a0c5764080000000060c085015260a0850151610a03908590886132fa565b9650610a2c9050565b64020000000060c085015260a0850151610a28908590886132fa565b9650505b8a63ffffffff16826001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398d8d88604051610a7a93929190614b1f565b60405180910390a4896001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c182524977848e8d88604051610acb9493929190614b5b565b60405180910390a350505050509695505050505050565b600080600080610b0b604080516060810182526000808252602082018190529181019190915290565b6000610b17888861356d565b9050610b2389826135d4565b90965091508515610b4257815160208301516040840151919650945092505b505093509350935093565b6060610b57614250565b610b5f6142ae565b600060606000610ba58c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015160a0909101519093509150506001600160a01b038816610bdc5760405162461bcd60e51b81526004016103e890614957565b896001600160a01b0316826001600160a01b031614610c325760405162461bcd60e51b81526020600482015260126024820152711251104e881157d393d517d0531313d5d15160721b60448201526064016103e8565b610c408b8b8a8c6001612d03565b6080890152506060870152604080870182905291865281516020810190925260008252610c70918d918b91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c087015250909550610cc190508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b0390921691610cf391614a3d565b6001600160801b0316610d069190614a65565b60808601515190915063ffffffff90811614610d5357846080015160800151856060015160200151610d389190614a3d565b60608601516001600160801b03909116602090910152610d86565b846080015160800151856060015160400151610d6f9190614a3d565b60608601516001600160801b039091166040909101525b8b6001600160a01b031663a1b2bf8b8660000151610da78860600151613067565b6040518363ffffffff1660e01b8152600401610dc49291906149f9565b600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b5050505060808501515163ffffffff90811614610e1c57610e1c8c8a8760800151600001516136e8565b60808501515163ffffffff1663fffffffe1901610eaa57610e418c8c61086d84614aea565b6001600160a01b038c1663cf97256d8c610e5a84614aea565b6040518363ffffffff1660e01b8152600401610e77929190614b06565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050505b6040858101519051632704839760e01b81526004810191909152600260248201526001600160a01b038d1690632704839790604401600060405180830381600087803b158015610ef957600080fd5b505af1158015610f0d573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038f16925063cf97256d9150610f3f908c908590600401614b06565b600060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151610f8d908590886132fa565b9050809650508963ffffffff168b6001600160a01b03168d6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d1428c86604051610fdf929190614ba4565b60405180910390a4886001600160a01b03168c6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558d8d8660405161102e93929190614bc8565b60405180910390a38963ffffffff168b6001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398c60008760405161108593929190614b1f565b60405180910390a4886001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c1825249778d8d600087604051610acb9493929190614b5b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461114f5760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920686f73742063616e2075706461746520636f64650000000000000060448201526064016103e8565b61115881613773565b50565b60006111857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000306001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111859190614bf8565b60008060008060008061121a604080516060810182526000808252602082018190529181019190915290565b6112226142e9565b6112308c8c8b8d6000612d03565b909b509296509094509250905087611259576000806000809750975097509750505050506112b9565b8051608082015163ffffffff9182169091141597509550866112af5780608001516001600160801b0316816060015183600001516112979190614a3d565b6001600160801b03166112aa9190614c11565b6112b2565b60005b9450505050505b945094509450949050565b60606112ce614250565b6112d66142ae565b60006060600061131c8b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a0015191505061133b8a8a848b6001612d03565b6080890181905260608901929092525060408701919091529085525163ffffffff1663fffffffe19016113b05760405162461bcd60e51b815260206004820152601860248201527f4944413a20455f535542535f4e4f545f415050524f564544000000000000000060448201526064016103e8565b6113cf8a8a866040015160405180602001604052806000815250612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c08701525090955061142090508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b039092169161145291614a3d565b6001600160801b03166114659190614a65565b90508460800151608001518560600151602001516114839190614a3d565b6060860180516001600160801b0390921660209092019190915260808087015101519051604001516114b59190614a12565b6060860180516001600160801b03909216604090920191909152855190516001600160a01b038d169163a1b2bf8b916114ed90613067565b6040518363ffffffff1660e01b815260040161150a9291906149f9565b600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050505061154f8b848760800151600001516136e8565b606080860151516080870180516001600160801b039092169190920152805163ffffffff9052604086015190516001600160a01b038d169163a1b2bf8b9161159690613105565b6040518363ffffffff1660e01b81526004016115b39291906149f9565b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506116139086908590600401614b06565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151611661908590886132fa565b9050809650508863ffffffff168a6001600160a01b03168c6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d14286866040516116b3929190614ba4565b60405180910390a4826001600160a01b03168b6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558c8c8660405161170293929190614bc8565b60405180910390a3505050505095945050505050565b6060600061175c8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806117728a848b613981565b9150915080600001516001600160801b0316886001600160801b031610156117d05760405162461bcd60e51b81526020600482015260116024820152704944413a20455f494e4445585f47524f5760781b60448201526064016103e8565b6117e38a848b85858d8a60a001516139df565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929d9c50505050505050505050505050565b6000806000611837868661356d565b905060008061184689846135d4565b91509150816118675760405162461bcd60e51b81526004016103e890614c30565b60008160400151826020015161187d9190614a12565b6001600160801b031690506000611897610587838a614c59565b83519091506118a7908290614a12565b95506118bc826001600160801b038316614c11565b9650505050505094509492505050565b60008060006060806118de8888613c32565b909250905060005b81518163ffffffff161015611abb5760006118ff6142e9565b600080868563ffffffff168151811061191a5761191a614c7b565b6020026020010151905061194d8d878763ffffffff168151811061194057611940614c7b565b6020026020010151613d25565b90945092508361195f5761195f614c91565b8063ffffffff16836000015163ffffffff161461197e5761197e614c91565b6001600160a01b038d16634b61cc33308e6119a363ffffffff8616600160801b61499a565b60016040518563ffffffff1660e01b81526004016119c49493929190614ca7565b600060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a099190810190614dcd565b600081518110611a1b57611a1b614c7b565b6020026020010151915050611a49604080516060810182526000808252602082018190529181019190915290565b611a538d836135d4565b909450905083611a6557611a65614c91565b82608001516001600160801b031683606001518260000151611a879190614a3d565b6001600160801b0316611a9a9190614a65565b611aa4908b614e01565b99505050505080611ab490614e42565b90506118e6565b50611ac68888613e41565b935060009250505093509350939050565b6060611b198784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b506001600160a01b038416611b405760405162461bcd60e51b81526004016103e890614957565b611b48614250565b611b506142ae565b611b5e8989888a6001612d03565b6080870181905260608701929092525060408501919091529083525163ffffffff90811614611bc65760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b60008260800151608001516001600160801b0316836080015160600151846060015160000151611bf69190614a3d565b6001600160801b0316611c099190614c11565b9050611c2a8a8a856040015160405180602001604052806000815250612e15565b915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505082159150611eba90505764040000000060c0830152611c828285612e43565b60a0840152611c958a8a61086d84614aea565b6001600160a01b038a1663cf97256d8a611cae84614aea565b6040518363ffffffff1660e01b8152600401611ccb929190614b06565b600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50505050606083810151516080850180516001600160801b039092169190920152604084015190516001600160a01b038c169163a1b2bf8b91611d3b90613105565b6040518363ffffffff1660e01b8152600401611d589291906149f9565b600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038d16925063cf97256d9150611db8908a908590600401614b06565b600060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050508763ffffffff16896001600160a01b03168b6001600160a01b03167f467eccd248ef31c8bcef16d94856855799a8783aeef10f3759e43614059a6bb18a85604051611e36929190614b06565b60405180910390a4604080516001600160a01b038b8116825263ffffffff8b166020830152918101839052818916918c16907f48a3d91d4a07e4982b081260e24f922bd33bb965882772d6de19c922c3eabdea9060600160405180910390a364080000000060c083015260a0830151611eb1908390866132fa565b9450611ef49050565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611f0b614250565b611f136142ae565b600060606000611f598b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a00151915050611f788a8a848b6000612d03565b6080890152158015602089015260608801919091526040870191909152908552611fee5760808401515163ffffffff90811614611fee5760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040808a0151815160208101909252918152949950612047948f94508e9350909150612e15565b925083602001516121705764010000000060c08401526120678386612e43565b60a08086019190915260408051918201815260008083526001600160a01b038c16602084015263ffffffff8b1691830191909152606080870151516001600160801b03169083015260808083019190915285015283516120ca908b908490613eea565b60808501805163ffffffff909216909152604085015190516001600160a01b038c16916312a6a3f8916120fc90613105565b6040518363ffffffff1660e01b81526004016121199291906149f9565b600060405180830381600087803b15801561213357600080fd5b505af1158015612147573d6000803e3d6000fd5b505064020000000060c0860152505060a0840151612167908490876132fa565b95506124319050565b64040000000060c08401526121858386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b03909216916121b791614a3d565b6001600160801b03166121ca9190614a65565b905084608001516080015185606001516020018181516121ea9190614a12565b6001600160801b0316905250608080860151015160608601516040018051612213908390614a3d565b6001600160801b0316905250845160608601516001600160a01b038d169163a1b2bf8b9161224090613067565b6040518363ffffffff1660e01b815260040161225d9291906149f9565b600060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b5050505061229e8b8b8361086d90614aea565b6001600160a01b038b1663cf97256d8b6122b784614aea565b6040518363ffffffff1660e01b81526004016122d4929190614b06565b600060405180830381600087803b1580156122ee57600080fd5b505af1158015612302573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506123349086908590600401614b06565b600060405180830381600087803b15801561234e57600080fd5b505af1158015612362573d6000803e3d6000fd5b5050506060808701515160808801516001600160801b0390911691015250845161238f908c908590613eea565b60808601805163ffffffff909216909152604086015190516001600160a01b038d169163a1b2bf8b916123c190613105565b6040518363ffffffff1660e01b81526004016123de9291906149f9565b600060405180830381600087803b1580156123f857600080fd5b505af115801561240c573d6000803e3d6000fd5b505064080000000060c0870152505060a085015161242c908590886132fa565b965050505b8763ffffffff16896001600160a01b03168b6001600160a01b03167f492d2641617cfaf24ac7328f85bc5bdf5113537d78dc7671afa4f49a73f053c2858560405161247d929190614ba4565b60405180910390a4816001600160a01b03168a6001600160a01b03167fc0b8396b655615cdb85fe462a9a1792480816f909cd46d9517a940b386dfbf6b8b8b856040516124cc93929190614bc8565b60405180910390a35050505095945050505050565b60608060608060606124f38787613c32565b909250905060006125026142e9565b82516001600160401b0381111561251b5761251b614cd0565b604051908082528060200260200182016040528015612544578160200160208202803683370190505b50965082516001600160401b0381111561256057612560614cd0565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b50955082516001600160401b038111156125a5576125a5614cd0565b6040519080825280602002602001820160405280156125ce578160200160208202803683370190505b50945060005b83518163ffffffff16101561272a576000858263ffffffff16815181106125fd576125fd614c7b565b602002602001015190506000858363ffffffff168151811061262157612621614c7b565b602002602001015190506126358c82613d25565b90955093508461264757612647614c91565b8163ffffffff16846000015163ffffffff161461266657612666614c91565b83602001518a8463ffffffff168151811061268357612683614c7b565b60200260200101906001600160a01b031690816001600160a01b0316815250508360400151898463ffffffff16815181106126c0576126c0614c7b565b602002602001019063ffffffff16908163ffffffff16815250508360800151888463ffffffff16815181106126f7576126f7614c7b565b60200260200101906001600160801b031690816001600160801b03168152505050508061272390614e42565b90506125d4565b50505050509250925092565b6060600061277a8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806127908a848b613981565b915091506000816040015182602001516127aa9190614a12565b6001600160801b0316905080156127f05760006127ca610587838c614c59565b90506127ee8c868d87878689600001516127e49190614a12565b8c60a001516139df565b505b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b6000806000806000806000612864604080516060810182526000808252602082018190529181019190915290565b61286c6142e9565b6128768b8b613d25565b9094509050836128b95760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b80602001519850806040015197506128d1898961356d565b92506128dd8b846135d4565b9094509150836128ef576128ef614c91565b8051608082015163ffffffff9182169091141597509550866129455780608001516001600160801b03168160600151836000015161292d9190614a3d565b6001600160801b03166129409190614c11565b612948565b60005b9450505050509295509295909350565b6060600061299c8685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015190915060006129b0828861356d565b90506129bc8882613f91565b156129ff5760405162461bcd60e51b81526020600482015260136024820152724944413a20455f494e4445585f45584953545360681b60448201526064016103e8565b876001600160a01b03166312a6a3f882612a50604051806060016040528060006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815250613067565b6040518363ffffffff1660e01b8152600401612a6d9291906149f9565b600060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050508663ffffffff16826001600160a01b0316896001600160a01b03167f01ab8663165edfb7390d9e5f75d960a66dacf4f01fa9787e3a731c870d0da9218660a00151604051612aed91906144df565b60405180910390a485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929b9a5050505050505050505050565b612b40614317565b336001600160a01b0316836001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bac9190614e70565b6001600160a01b031614612bf65760405162461bcd60e51b81526020600482015260116024820152701d5b985d5d1a1bdc9a5e9959081a1bdcdd607a1b60448201526064016103e8565b604051632fd0a1cd60e21b8152339063bf42873490612c199085906004016144df565b602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5a9190614e9d565b612c945760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840c6e8f60ab1b60448201526064016103e8565b604051631fb6491d60e11b81523390633f6c923a90612cb79085906004016144df565b600060405180830381865afa158015612cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190614f44565b9392505050565b6040805160608101825260008082526020820181905291810182905281906000612d2b6142e9565b6000612d378a8961356d565b9550612d43898761403d565b9450612d4f8b876135d4565b9450905080612d705760405162461bcd60e51b81526004016103e890614c30565b612d7a8b86613d25565b90935091508615612e075782612dc35760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b896001600160a01b031682602001516001600160a01b031614612de857612de8614c91565b8763ffffffff16826040015163ffffffff1614612e0757612e07614c91565b509550955095509550959050565b612e1d6142ae565b6001600160a01b0394851681529290931660208301526040820152606081019190915290565b6020820151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061504a565b91945092509050828015612ecd575081155b15612ff1576000612ede868861407e565b90508660c001518216600003612fe3576000612efd8860c001516140fc565b88516040808b015160608c015182516000815260208101909352612f2993923092919060448101615086565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918a015160c08b01519251633a020f0160e11b815291935033926374041e0292612f9892918691641000000000919091149088906004016150cb565b6000604051808303816000875af1158015612fb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fdf9190810190615114565b9550505b612fee866000614193565b50505b50505092915050565b60006001600160801b038211156130635760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016103e8565b5090565b604080516002808252606080830184529260208301908036833701905050905081600001516001600160801b0316600160801b1760001b816000815181106130b1576130b1614c7b565b602002602001018181525050608082604001516001600160801b0316901b82602001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b602002602001018181525050919050565b6040805160028082526060808301845292602083019080368337019050509050816000015163ffffffff166020836040015163ffffffff16901b606084602001516001600160a01b0316901b171760001b8160008151811061316957613169614c7b565b602002602001018181525050608082608001516001600160801b0316901b82606001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b806000036131b957505050565b604051634b61cc3360e01b81526000906001600160a01b03851690634b61cc33906131f4903090879064010000000090600190600401614ca7565b600060405180830381865afa158015613211573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132399190810190614dcd565b9050816132628260008151811061325257613252614c7b565b602002602001015160001c6141bb565b61326c9190614e01565b60001b8160008151811061328257613282614c7b565b602090810291909101015260405163048620af60e11b81526001600160a01b0385169063090c415e906132c2908690640100000000908690600401615148565b600060405180830381600087803b1580156132dc57600080fd5b505af11580156132f0573d6000803e3d6000fd5b5050505050505050565b613302614317565b6020840151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015613356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337a919061504a565b8896509194509250905082801561338f575081155b156135625761339e848961407e565b93508760c0015181166000036135505760006133bd8960c001516140fc565b89516040808c015160608d0151825160008152602081019093526133eb9392309291908e906044810161516f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918b015160c08c0151925163079b42a160e21b81529193503392631e6d0a849261345a9291869164200000000091909114908b906004016150cb565b6000604051808303816000875af1158015613479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134a19190810190615114565b604051631fb6491d60e11b81529095503390633f6c923a906134c79088906004016144df565b600060405180830381865afa1580156134e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350c9190810190614f44565b955061354860006135436135238c608001516141bb565b61353e6135338b60e001516141bb565b8b6101000151614225565b61423b565b614225565b610100870152505b61355f86866101000151614193565b93505b505050935093915050565b60405168383ab13634b9b432b960b91b60208201526bffffffffffffffffffffffff19606084901b1660298201526001600160e01b031960e083901b16603d8201526000906041015b60405160208183030381529060405280519060200120905092915050565b60408051606081018252600080825260208201819052918101829052604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261366d9190810190614dcd565b905060008160008151811061368457613684614c7b565b602002602001015160001c90506000826001815181106136a6576136a6614c7b565b602002602001015160001c905060008211945084156136de576001600160801b03808316855281166020850152608081901c60408501525b5050509250929050565b604051631528e57f60e31b81526001600160a01b038085166004830152831660248201526000604482015263ffffffff8216606482015273__SlotsBitmapLibrary____________________9063a9472bf89060840160006040518083038186803b15801561375657600080fd5b505af415801561376a573d6000803e3d6000fd5b50505050505050565b600061379d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137f35760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016103e8565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190614bf8565b61385d61118a565b146138b65760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016103e8565b6001600160a01b038116300361390e5760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016103e8565b613936817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc61395f61118a565b604080519182526001600160a01b03841660208301520160405180910390a150565b6040805160608101825260008082526020820181905291810182905260006139a9858561356d565b92506139b586846135d4565b92509050806139d65760405162461bcd60e51b81526004016103e890614c30565b50935093915050565b866001600160a01b031663cf97256d8785602001516001600160801b0316866000015186613a0d9190614a3d565b6001600160801b0316613a1f90614aea565b613a299190614a65565b6040518363ffffffff1660e01b8152600401613a46929190614b06565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050613aae878785604001516001600160801b0316866000015186613a9b9190614a3d565b6001600160801b031661086d9190614a65565b82516001600160801b03831684526001600160a01b03881663a1b2bf8b86613ad587613067565b6040518363ffffffff1660e01b8152600401613af29291906149f9565b600060405180830381600087803b158015613b0c57600080fd5b505af1158015613b20573d6000803e3d6000fd5b505050508563ffffffff16876001600160a01b0316896001600160a01b03167f81e37f3d9f16cbf29a62d6a1c21d79b23ef29b54124ec44af43a50fffb9304f3848789604001518a6020015189604051613b7e9594939291906151d5565b60405180910390a46040516379359f6f60e01b81526001600160a01b0388811660048301528916906379359f6f90602401602060405180830381865afa158015613bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf09190614e9d565b156132f05760405162461bcd60e51b81526020600482015260126024820152714944413a20455f4c4f575f42414c414e434560701b60448201526064016103e8565b60608073__SlotsBitmapLibrary____________________6306967a8c85856000600160801b6040518563ffffffff1660e01b8152600401613c779493929190614ca7565b600060405180830381865af4158015613c94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cbc9190810190615211565b909250905060005b8151811015613d1d57613cf084838381518110613ce357613ce3614c7b565b602002602001015161403d565b828281518110613d0257613d02614c7b565b6020908102919091010152613d16816152d5565b9050613cc4565b509250929050565b6000613d2f6142e9565b604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613d84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dac9190810190614dcd565b9050600081600081518110613dc357613dc3614c7b565b602002602001015160001c9050600082600181518110613de557613de5614c7b565b602002602001015160001c905060008211945084156136de57606082811c60208087019190915283901c63ffffffff9081166040870152831685526001600160801b03821690850152608081811c908501525050509250929050565b600080836001600160a01b0316634b61cc33308564010000000060016040518563ffffffff1660e01b8152600401613e7c9493929190614ca7565b600060405180830381865afa158015613e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec19190810190614dcd565b905080600081518110613ed657613ed6614c7b565b602002602001015160001c91505092915050565b604051630a32470160e41b81526001600160a01b03808516600483015283166024820152600060448201819052600160801b6064830152608482018390529073__SlotsBitmapLibrary____________________9063a32470109060a401602060405180830381865af4158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8991906152ee565b949350505050565b604051636c2d9f2f60e01b8152306004820152602481018290526002604482015260009081906001600160a01b03851690636c2d9f2f90606401600060405180830381865afa158015613fe8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140109190810190614dcd565b905060008160008151811061402757614027614c7b565b6020908102919091010151151595945050505050565b604080516b39bab139b1b934b83a34b7b760a11b6020820152606084811b6bffffffffffffffffffffffff1916602c830152918101839052600091016135b6565b6020810151608082015160a08301518351604051630768fabb60e41b8152606094339463768fabb0946140b5948a9460040161530b565b6000604051808303816000875af11580156140d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190615114565b6000640100000000820361411857506330d9c91560e01b919050565b64040000000082036141325750630221347d60e61b919050565b641000000000820361414c5750635f9e7d7760e01b919050565b6402000000008203614166575063d86ed3e560e01b919050565b6408000000008203614180575063230dbd2960e01b919050565b506353c11f9960e01b919050565b919050565b604051634c4d861f60e11b8152606090339063989b0c3e906140b59086908690600401615350565b60006001600160ff1b038211156130635760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016103e8565b60008183136142345781612cfc565b5090919050565b600081831361424a5782612cfc565b50919050565b6040805160c0810182526000808252602082018190529181019190915260608101614294604080516060810182526000808252602082018190529181019190915290565b81526020016142a16142e9565b8152602001606081525090565b6040805160e0810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461115857600080fd5b63ffffffff8116811461115857600080fd5b80356001600160801b038116811461418e57600080fd5b60008083601f8401126143c257600080fd5b5081356001600160401b038111156143d957600080fd5b6020830191508360208285010111156143f157600080fd5b9250929050565b60008060008060008060a0878903121561441157600080fd5b863561441c81614372565b9550602087013561442c81614387565b9450604087013561443c81614372565b935061444a60608801614399565b925060808701356001600160401b0381111561446557600080fd5b61447189828a016143b0565b979a9699509497509295939492505050565b60005b8381101561449e578181015183820152602001614486565b838111156144ad576000848401525b50505050565b600081518084526144cb816020860160208601614483565b601f01601f19169290920160200192915050565b602081526000612cfc60208301846144b3565b60008060006060848603121561450757600080fd5b833561451281614372565b9250602084013561452281614372565b9150604084013561453281614387565b809150509250925092565b60008060008060008060a0878903121561455657600080fd5b863561456181614372565b9550602087013561457181614372565b9450604087013561458181614387565b9350606087013561444a81614372565b6000602082840312156145a357600080fd5b8135612cfc81614372565b600080600080608085870312156145c457600080fd5b84356145cf81614372565b935060208501356145df81614372565b925060408501356145ef81614387565b915060608501356145ff81614372565b939692955090935050565b60008060008060006080868803121561462257600080fd5b853561462d81614372565b9450602086013561463d81614372565b9350604086013561464d81614387565b925060608601356001600160401b0381111561466857600080fd5b614674888289016143b0565b969995985093965092949392505050565b60008060008060006080868803121561469d57600080fd5b85356146a881614372565b945060208601356146b881614387565b935061464d60408701614399565b600080600080608085870312156146dc57600080fd5b84356146e781614372565b935060208501356146f781614372565b9250604085013561470781614387565b9396929550929360600135925050565b60008060006060848603121561472c57600080fd5b833561473781614372565b9250602084013561474781614372565b929592945050506040919091013590565b6000806040838503121561476b57600080fd5b823561477681614372565b9150602083013561478681614372565b809150509250929050565b600081518084526020808501945080840160005b838110156147ca5781516001600160801b0316875295820195908201906001016147a5565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156148175781516001600160a01b0316845292840192908401906001016147f2565b5050508381038285015285518082528683019183019060005b8181101561485257835163ffffffff1683529284019291840191600101614830565b505084810360408601526148668187614791565b98975050505050505050565b60008060008060006080868803121561488a57600080fd5b853561489581614372565b945060208601356148a581614387565b93506040860135925060608601356001600160401b0381111561466857600080fd5b600080604083850312156148da57600080fd5b82356148e581614372565b946020939093013593505050565b6000806000806060858703121561490957600080fd5b843561491481614372565b9350602085013561492481614387565b925060408501356001600160401b0381111561493f57600080fd5b61494b878288016143b0565b95989497509550505050565b6020808252601390820152724944413a20455f4e4f5f5a45524f5f5355425360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156149ad576149ad614984565b500190565b6000828210156149c4576149c4614984565b500390565b600081518084526020808501945080840160005b838110156147ca578151875295820195908201906001016149dd565b828152604060208201526000613f8960408301846149c9565b60006001600160801b03808316818516808303821115614a3457614a34614984565b01949350505050565b60006001600160801b0383811690831681811015614a5d57614a5d614984565b039392505050565b60006001600160ff1b0381841382841380821686840486111615614a8b57614a8b614984565b600160ff1b6000871282811687830589121615614aaa57614aaa614984565b60008712925087820587128484161615614ac657614ac6614984565b87850587128184161615614adc57614adc614984565b505050929093029392505050565b6000600160ff1b8201614aff57614aff614984565b5060000390565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526001600160801b0383166020820152606060408201819052600090614b52908301846144b3565b95945050505050565b6001600160a01b038516815263ffffffff841660208201526001600160801b0383166040820152608060608201819052600090614b9a908301846144b3565b9695505050505050565b6001600160a01b0383168152604060208201819052600090613f89908301846144b3565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090614b52908301846144b3565b600060208284031215614c0a57600080fd5b5051919050565b6000816000190483118215151615614c2b57614c2b614984565b500290565b6020808252600f908201526e092888274408abe9c9ebe929c888ab608b1b604082015260600190565b600082614c7657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614d0957614d09614cd0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d3757614d37614cd0565b604052919050565b60006001600160401b03821115614d5857614d58614cd0565b5060051b60200190565b600082601f830112614d7357600080fd5b81516020614d88614d8383614d3f565b614d0f565b82815260059290921b84018101918181019086841115614da757600080fd5b8286015b84811015614dc25780518352918301918301614dab565b509695505050505050565b600060208284031215614ddf57600080fd5b81516001600160401b03811115614df557600080fd5b613f8984828501614d62565b600080821280156001600160ff1b0384900385131615614e2357614e23614984565b600160ff1b8390038412811615614e3c57614e3c614984565b50500190565b600063ffffffff808316818103614e5b57614e5b614984565b6001019392505050565b805161418e81614372565b600060208284031215614e8257600080fd5b8151612cfc81614372565b8051801515811461418e57600080fd5b600060208284031215614eaf57600080fd5b612cfc82614e8d565b805160ff8116811461418e57600080fd5b80516001600160e01b03198116811461418e57600080fd5b600082601f830112614ef257600080fd5b81516001600160401b03811115614f0b57614f0b614cd0565b614f1e601f8201601f1916602001614d0f565b818152846020838601011115614f3357600080fd5b613f89826020830160208701614483565b600060208284031215614f5657600080fd5b81516001600160401b0380821115614f6d57600080fd5b908301906101608286031215614f8257600080fd5b614f8a614ce6565b614f9383614eb8565b8152614fa160208401614eb8565b602082015260408301516040820152614fbc60608401614e65565b6060820152614fcd60808401614ec9565b608082015260a083015182811115614fe457600080fd5b614ff087828601614ee1565b60a08301525060c083015160c082015260e083015160e0820152610100915081830151828201526101209150615027828401614e65565b82820152610140915061503b828401614e65565b91810191909152949350505050565b60008060006060848603121561505f57600080fd5b61506884614e8d565b925061507660208501614e8d565b9150604084015190509250925092565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906150b9908301856144b3565b828103608084015261486681856144b3565b6001600160a01b03851681526080602082018190526000906150ef908301866144b3565b8415156040840152828103606084015261510981856144b3565b979650505050505050565b60006020828403121561512657600080fd5b81516001600160401b0381111561513c57600080fd5b613f8984828501614ee1565b60018060a01b0384168152826020820152606060408201526000614b5260608301846149c9565b6001600160a01b038781168252861660208201526040810185905260c0606082018190526000906151a2908301866144b3565b82810360808401526151b481866144b3565b905082810360a08401526151c881856144b3565b9998505050505050505050565b60006001600160801b0380881683528087166020840152808616604084015280851660608401525060a0608083015261510960a08301846144b3565b6000806040838503121561522457600080fd5b82516001600160401b038082111561523b57600080fd5b818501915085601f83011261524f57600080fd5b8151602061525f614d8383614d3f565b82815260059290921b8401810191818101908984111561527e57600080fd5b948201945b838610156152a557855161529681614387565b82529482019490820190615283565b918801519196509093505050808211156152be57600080fd5b506152cb85828601614d62565b9150509250929050565b6000600182016152e7576152e7614984565b5060010190565b60006020828403121561530057600080fd5b8151612cfc81614387565b60a08152600061531e60a08301886144b3565b6001600160a01b0396871660208401526040830195909552506060810192909252909216608090920191909152919050565b60408152600061536360408301856144b3565b9050826020830152939250505056fea26469706673582212207ec96719b31a750b96557a86e8487a8e23f9dce3c210c0886ab36a6a7f5c522a64736f6c634300080d0033",
|
|
1027
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80637730599e116100ad578063acf4a6c211610071578063acf4a6c21461030d578063b6dacdb814610320578063b96731c214610342578063cd7245c514610355578063d787840a146103ad57600080fd5b80637730599e146102635780637fbc763914610289578063899baaec1461029c5780639b2e48bc146102cc578063acafa1b8146102fa57600080fd5b806346951954116100f457806346951954146101d957806350d75d25146101ee57806352d1902d146101f65780635b5340511461020c5780636041ae961461025057600080fd5b8063232d2b581461012657806323fc23f31461014f5780632e5e74c6146101935780633fd4176a146101a6575b600080fd5b6101396101343660046143f8565b6103c0565b60405161014691906144df565b60405180910390f35b61016261015d3660046144f2565b610ae2565b6040805194151585526001600160801b03938416602086015291831691840191909152166060820152608001610146565b6101396101a136600461453d565b610b4d565b6101c173__SlotsBitmapLibrary____________________81565b6040516001600160a01b039091168152602001610146565b6101ec6101e7366004614591565b6110d7565b005b6101c161115b565b6101fe61118a565b604051908152602001610146565b61021f61021a3660046145ae565b6111ee565b6040516101469493929190931515845291151560208401526001600160801b03166040830152606082015260800190565b61013961025e36600461460a565b6112c4565b7f8aedc3b5d4bf031e11a7e2940f7251c005698405d58e02e1c247fed3b1b3a6746101fe565b610139610297366004614685565b611718565b6102af6102aa3660046146c6565b611828565b604080519283526001600160801b03909116602083015201610146565b6102df6102da366004614717565b6118cc565b60408051938452602084019290925290820152606001610146565b61013961030836600461453d565b611ad7565b61013961031b36600461460a565b611f01565b61033361032e366004614758565b6124e1565b604051610146939291906147d5565b610139610350366004614872565b612736565b6103686103633660046148c7565b612836565b604080516001600160a01b03909616865263ffffffff9094166020860152911515928401929092526001600160801b039091166060830152608082015260a001610146565b6101396103bb3660046148f3565b612958565b60606001600160a01b0385166103f15760405162461bcd60e51b81526004016103e890614957565b60405180910390fd5b6103f9614250565b6104016142ae565b60606000806104468c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b90508060a00151925080606001519150506104658b828b8d6000612d03565b60808901521515602080890191909152606088019190915260408088018390529287528251908101909252600082526104a1918d918c91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050602086015191965050156105055764040000000060c08401526104fb8386612e43565b60a0850152610520565b64010000000060c084015261051a8386612e43565b60a08501525b8360200151801561053d575060808401515163ffffffff90811614155b156106185761058c8460800151608001516001600160801b0316896001600160801b03168660600151602001516001600160801b031661057d919061499a565b61058791906149b2565b612ffa565b6060850180516001600160801b03909216602090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518363ffffffff1660e01b81526004016105e19291906149f9565b600060405180830381600087803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b505050506107ff565b8360200151156106955761065d8460800151608001516001600160801b0316896001600160801b03168660600151604001516001600160801b031661057d919061499a565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518060a0016040528063ffffffff80168152602001826001600160a01b031681526020018b63ffffffff1681526020018560600151600001516001600160801b03168152602001896001600160801b031681525084608001819052508a6001600160a01b03166312a6a3f885604001516107148760800151613105565b6040518363ffffffff1660e01b81526004016107319291906149f9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50505050878460600151604001516107779190614a12565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916107af90613067565b6040518363ffffffff1660e01b81526004016107cc9291906149f9565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505b60008460800151608001516001600160801b031685608001516060015186606001516000015161082f9190614a3d565b6001600160801b03166108429190614a65565b905063ffffffff801685608001516000015163ffffffff16036108db576108728c8361086d84614aea565b6131ac565b6001600160a01b038c1663cf97256d8361088b84614aea565b6040518363ffffffff1660e01b81526004016108a8929190614b06565b600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050505b60405163cf97256d60e01b81526001600160a01b038d169063cf97256d90610909908d908590600401614b06565b600060405180830381600087803b15801561092357600080fd5b505af1158015610937573d6000803e3d6000fd5b505050508460200151156109dd5760608086015151608080880180516001600160801b039384169401939093528251918c16910152604086015190516001600160a01b038e169163a1b2bf8b9161098d90613105565b6040518363ffffffff1660e01b81526004016109aa9291906149f9565b600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b505050505b846020015115610a0c5764080000000060c085015260a0850151610a03908590886132fa565b9650610a2c9050565b64020000000060c085015260a0850151610a28908590886132fa565b9650505b8a63ffffffff16826001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398d8d88604051610a7a93929190614b1f565b60405180910390a4896001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c182524977848e8d88604051610acb9493929190614b5b565b60405180910390a350505050509695505050505050565b600080600080610b0b604080516060810182526000808252602082018190529181019190915290565b6000610b17888861356d565b9050610b2389826135d4565b90965091508515610b4257815160208301516040840151919650945092505b505093509350935093565b6060610b57614250565b610b5f6142ae565b600060606000610ba58c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015160a0909101519093509150506001600160a01b038816610bdc5760405162461bcd60e51b81526004016103e890614957565b896001600160a01b0316826001600160a01b031614610c325760405162461bcd60e51b81526020600482015260126024820152711251104e881157d393d517d0531313d5d15160721b60448201526064016103e8565b610c408b8b8a8c6001612d03565b6080890152506060870152604080870182905291865281516020810190925260008252610c70918d918b91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c087015250909550610cc190508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b0390921691610cf391614a3d565b6001600160801b0316610d069190614a65565b60808601515190915063ffffffff90811614610d5357846080015160800151856060015160200151610d389190614a3d565b60608601516001600160801b03909116602090910152610d86565b846080015160800151856060015160400151610d6f9190614a3d565b60608601516001600160801b039091166040909101525b8b6001600160a01b031663a1b2bf8b8660000151610da78860600151613067565b6040518363ffffffff1660e01b8152600401610dc49291906149f9565b600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b5050505060808501515163ffffffff90811614610e1c57610e1c8c8a8760800151600001516136e8565b60808501515163ffffffff1663fffffffe1901610eaa57610e418c8c61086d84614aea565b6001600160a01b038c1663cf97256d8c610e5a84614aea565b6040518363ffffffff1660e01b8152600401610e77929190614b06565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050505b6040858101519051632704839760e01b81526004810191909152600260248201526001600160a01b038d1690632704839790604401600060405180830381600087803b158015610ef957600080fd5b505af1158015610f0d573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038f16925063cf97256d9150610f3f908c908590600401614b06565b600060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151610f8d908590886132fa565b9050809650508963ffffffff168b6001600160a01b03168d6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d1428c86604051610fdf929190614ba4565b60405180910390a4886001600160a01b03168c6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558d8d8660405161102e93929190614bc8565b60405180910390a38963ffffffff168b6001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398c60008760405161108593929190614b1f565b60405180910390a4886001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c1825249778d8d600087604051610acb9493929190614b5b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461114f5760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920686f73742063616e2075706461746520636f64650000000000000060448201526064016103e8565b61115881613773565b50565b60006111857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000306001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111859190614bf8565b60008060008060008061121a604080516060810182526000808252602082018190529181019190915290565b6112226142e9565b6112308c8c8b8d6000612d03565b909b509296509094509250905087611259576000806000809750975097509750505050506112b9565b8051608082015163ffffffff9182169091141597509550866112af5780608001516001600160801b0316816060015183600001516112979190614a3d565b6001600160801b03166112aa9190614c11565b6112b2565b60005b9450505050505b945094509450949050565b60606112ce614250565b6112d66142ae565b60006060600061131c8b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a0015191505061133b8a8a848b6001612d03565b6080890181905260608901929092525060408701919091529085525163ffffffff1663fffffffe19016113b05760405162461bcd60e51b815260206004820152601860248201527f4944413a20455f535542535f4e4f545f415050524f564544000000000000000060448201526064016103e8565b6113cf8a8a866040015160405180602001604052806000815250612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c08701525090955061142090508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b039092169161145291614a3d565b6001600160801b03166114659190614a65565b90508460800151608001518560600151602001516114839190614a3d565b6060860180516001600160801b0390921660209092019190915260808087015101519051604001516114b59190614a12565b6060860180516001600160801b03909216604090920191909152855190516001600160a01b038d169163a1b2bf8b916114ed90613067565b6040518363ffffffff1660e01b815260040161150a9291906149f9565b600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050505061154f8b848760800151600001516136e8565b606080860151516080870180516001600160801b039092169190920152805163ffffffff9052604086015190516001600160a01b038d169163a1b2bf8b9161159690613105565b6040518363ffffffff1660e01b81526004016115b39291906149f9565b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506116139086908590600401614b06565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151611661908590886132fa565b9050809650508863ffffffff168a6001600160a01b03168c6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d14286866040516116b3929190614ba4565b60405180910390a4826001600160a01b03168b6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558c8c8660405161170293929190614bc8565b60405180910390a3505050505095945050505050565b6060600061175c8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806117728a848b613981565b9150915080600001516001600160801b0316886001600160801b031610156117d05760405162461bcd60e51b81526020600482015260116024820152704944413a20455f494e4445585f47524f5760781b60448201526064016103e8565b6117e38a848b85858d8a60a001516139df565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929d9c50505050505050505050505050565b6000806000611837868661356d565b905060008061184689846135d4565b91509150816118675760405162461bcd60e51b81526004016103e890614c30565b60008160400151826020015161187d9190614a12565b6001600160801b031690506000611897610587838a614c59565b83519091506118a7908290614a12565b95506118bc826001600160801b038316614c11565b9650505050505094509492505050565b60008060006060806118de8888613c32565b909250905060005b81518163ffffffff161015611abb5760006118ff6142e9565b600080868563ffffffff168151811061191a5761191a614c7b565b6020026020010151905061194d8d878763ffffffff168151811061194057611940614c7b565b6020026020010151613d25565b90945092508361195f5761195f614c91565b8063ffffffff16836000015163ffffffff161461197e5761197e614c91565b6001600160a01b038d16634b61cc33308e6119a363ffffffff8616600160801b61499a565b60016040518563ffffffff1660e01b81526004016119c49493929190614ca7565b600060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a099190810190614dcd565b600081518110611a1b57611a1b614c7b565b6020026020010151915050611a49604080516060810182526000808252602082018190529181019190915290565b611a538d836135d4565b909450905083611a6557611a65614c91565b82608001516001600160801b031683606001518260000151611a879190614a3d565b6001600160801b0316611a9a9190614a65565b611aa4908b614e01565b99505050505080611ab490614e42565b90506118e6565b50611ac68888613e41565b935060009250505093509350939050565b6060611b198784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b506001600160a01b038416611b405760405162461bcd60e51b81526004016103e890614957565b611b48614250565b611b506142ae565b611b5e8989888a6001612d03565b6080870181905260608701929092525060408501919091529083525163ffffffff90811614611bc65760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b60008260800151608001516001600160801b0316836080015160600151846060015160000151611bf69190614a3d565b6001600160801b0316611c099190614c11565b9050611c2a8a8a856040015160405180602001604052806000815250612e15565b915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505082159150611eba90505764040000000060c0830152611c828285612e43565b60a0840152611c958a8a61086d84614aea565b6001600160a01b038a1663cf97256d8a611cae84614aea565b6040518363ffffffff1660e01b8152600401611ccb929190614b06565b600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50505050606083810151516080850180516001600160801b039092169190920152604084015190516001600160a01b038c169163a1b2bf8b91611d3b90613105565b6040518363ffffffff1660e01b8152600401611d589291906149f9565b600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038d16925063cf97256d9150611db8908a908590600401614b06565b600060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050508763ffffffff16896001600160a01b03168b6001600160a01b03167f467eccd248ef31c8bcef16d94856855799a8783aeef10f3759e43614059a6bb18a85604051611e36929190614b06565b60405180910390a4604080516001600160a01b038b8116825263ffffffff8b166020830152918101839052818916918c16907f48a3d91d4a07e4982b081260e24f922bd33bb965882772d6de19c922c3eabdea9060600160405180910390a364080000000060c083015260a0830151611eb1908390866132fa565b9450611ef49050565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611f0b614250565b611f136142ae565b600060606000611f598b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a00151915050611f788a8a848b6000612d03565b6080890152158015602089015260608801919091526040870191909152908552611fee5760808401515163ffffffff90811614611fee5760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040808a0151815160208101909252918152949950612047948f94508e9350909150612e15565b925083602001516121705764010000000060c08401526120678386612e43565b60a08086019190915260408051918201815260008083526001600160a01b038c16602084015263ffffffff8b1691830191909152606080870151516001600160801b03169083015260808083019190915285015283516120ca908b908490613eea565b60808501805163ffffffff909216909152604085015190516001600160a01b038c16916312a6a3f8916120fc90613105565b6040518363ffffffff1660e01b81526004016121199291906149f9565b600060405180830381600087803b15801561213357600080fd5b505af1158015612147573d6000803e3d6000fd5b505064020000000060c0860152505060a0840151612167908490876132fa565b95506124319050565b64040000000060c08401526121858386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b03909216916121b791614a3d565b6001600160801b03166121ca9190614a65565b905084608001516080015185606001516020018181516121ea9190614a12565b6001600160801b0316905250608080860151015160608601516040018051612213908390614a3d565b6001600160801b0316905250845160608601516001600160a01b038d169163a1b2bf8b9161224090613067565b6040518363ffffffff1660e01b815260040161225d9291906149f9565b600060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b5050505061229e8b8b8361086d90614aea565b6001600160a01b038b1663cf97256d8b6122b784614aea565b6040518363ffffffff1660e01b81526004016122d4929190614b06565b600060405180830381600087803b1580156122ee57600080fd5b505af1158015612302573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506123349086908590600401614b06565b600060405180830381600087803b15801561234e57600080fd5b505af1158015612362573d6000803e3d6000fd5b5050506060808701515160808801516001600160801b0390911691015250845161238f908c908590613eea565b60808601805163ffffffff909216909152604086015190516001600160a01b038d169163a1b2bf8b916123c190613105565b6040518363ffffffff1660e01b81526004016123de9291906149f9565b600060405180830381600087803b1580156123f857600080fd5b505af115801561240c573d6000803e3d6000fd5b505064080000000060c0870152505060a085015161242c908590886132fa565b965050505b8763ffffffff16896001600160a01b03168b6001600160a01b03167f492d2641617cfaf24ac7328f85bc5bdf5113537d78dc7671afa4f49a73f053c2858560405161247d929190614ba4565b60405180910390a4816001600160a01b03168a6001600160a01b03167fc0b8396b655615cdb85fe462a9a1792480816f909cd46d9517a940b386dfbf6b8b8b856040516124cc93929190614bc8565b60405180910390a35050505095945050505050565b60608060608060606124f38787613c32565b909250905060006125026142e9565b82516001600160401b0381111561251b5761251b614cd0565b604051908082528060200260200182016040528015612544578160200160208202803683370190505b50965082516001600160401b0381111561256057612560614cd0565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b50955082516001600160401b038111156125a5576125a5614cd0565b6040519080825280602002602001820160405280156125ce578160200160208202803683370190505b50945060005b83518163ffffffff16101561272a576000858263ffffffff16815181106125fd576125fd614c7b565b602002602001015190506000858363ffffffff168151811061262157612621614c7b565b602002602001015190506126358c82613d25565b90955093508461264757612647614c91565b8163ffffffff16846000015163ffffffff161461266657612666614c91565b83602001518a8463ffffffff168151811061268357612683614c7b565b60200260200101906001600160a01b031690816001600160a01b0316815250508360400151898463ffffffff16815181106126c0576126c0614c7b565b602002602001019063ffffffff16908163ffffffff16815250508360800151888463ffffffff16815181106126f7576126f7614c7b565b60200260200101906001600160801b031690816001600160801b03168152505050508061272390614e42565b90506125d4565b50505050509250925092565b6060600061277a8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806127908a848b613981565b915091506000816040015182602001516127aa9190614a12565b6001600160801b0316905080156127f05760006127ca610587838c614c59565b90506127ee8c868d87878689600001516127e49190614a12565b8c60a001516139df565b505b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b6000806000806000806000612864604080516060810182526000808252602082018190529181019190915290565b61286c6142e9565b6128768b8b613d25565b9094509050836128b95760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b80602001519850806040015197506128d1898961356d565b92506128dd8b846135d4565b9094509150836128ef576128ef614c91565b8051608082015163ffffffff9182169091141597509550866129455780608001516001600160801b03168160600151836000015161292d9190614a3d565b6001600160801b03166129409190614c11565b612948565b60005b9450505050509295509295909350565b6060600061299c8685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015190915060006129b0828861356d565b90506129bc8882613f91565b156129ff5760405162461bcd60e51b81526020600482015260136024820152724944413a20455f494e4445585f45584953545360681b60448201526064016103e8565b876001600160a01b03166312a6a3f882612a50604051806060016040528060006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815250613067565b6040518363ffffffff1660e01b8152600401612a6d9291906149f9565b600060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050508663ffffffff16826001600160a01b0316896001600160a01b03167f01ab8663165edfb7390d9e5f75d960a66dacf4f01fa9787e3a731c870d0da9218660a00151604051612aed91906144df565b60405180910390a485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929b9a5050505050505050505050565b612b40614317565b336001600160a01b0316836001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bac9190614e70565b6001600160a01b031614612bf65760405162461bcd60e51b81526020600482015260116024820152701d5b985d5d1a1bdc9a5e9959081a1bdcdd607a1b60448201526064016103e8565b604051632fd0a1cd60e21b8152339063bf42873490612c199085906004016144df565b602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5a9190614e9d565b612c945760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840c6e8f60ab1b60448201526064016103e8565b604051631fb6491d60e11b81523390633f6c923a90612cb79085906004016144df565b600060405180830381865afa158015612cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190614f44565b9392505050565b6040805160608101825260008082526020820181905291810182905281906000612d2b6142e9565b6000612d378a8961356d565b9550612d43898761403d565b9450612d4f8b876135d4565b9450905080612d705760405162461bcd60e51b81526004016103e890614c30565b612d7a8b86613d25565b90935091508615612e075782612dc35760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b896001600160a01b031682602001516001600160a01b031614612de857612de8614c91565b8763ffffffff16826040015163ffffffff1614612e0757612e07614c91565b509550955095509550959050565b612e1d6142ae565b6001600160a01b0394851681529290931660208301526040820152606081019190915290565b6020820151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061504a565b91945092509050828015612ecd575081155b15612ff1576000612ede868861407e565b90508660c001518216600003612fe3576000612efd8860c001516140fc565b88516040808b015160608c015182516000815260208101909352612f2993923092919060448101615086565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918a015160c08b01519251633a020f0160e11b815291935033926374041e0292612f9892918691641000000000919091149088906004016150cb565b6000604051808303816000875af1158015612fb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fdf9190810190615114565b9550505b612fee866000614193565b50505b50505092915050565b60006001600160801b038211156130635760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016103e8565b5090565b604080516002808252606080830184529260208301908036833701905050905081600001516001600160801b0316600160801b1760001b816000815181106130b1576130b1614c7b565b602002602001018181525050608082604001516001600160801b0316901b82602001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b602002602001018181525050919050565b6040805160028082526060808301845292602083019080368337019050509050816000015163ffffffff166020836040015163ffffffff16901b606084602001516001600160a01b0316901b171760001b8160008151811061316957613169614c7b565b602002602001018181525050608082608001516001600160801b0316901b82606001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b806000036131b957505050565b604051634b61cc3360e01b81526000906001600160a01b03851690634b61cc33906131f4903090879064010000000090600190600401614ca7565b600060405180830381865afa158015613211573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132399190810190614dcd565b9050816132628260008151811061325257613252614c7b565b602002602001015160001c6141bb565b61326c9190614e01565b60001b8160008151811061328257613282614c7b565b602090810291909101015260405163048620af60e11b81526001600160a01b0385169063090c415e906132c2908690640100000000908690600401615148565b600060405180830381600087803b1580156132dc57600080fd5b505af11580156132f0573d6000803e3d6000fd5b5050505050505050565b613302614317565b6020840151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015613356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337a919061504a565b8896509194509250905082801561338f575081155b156135625761339e848961407e565b93508760c0015181166000036135505760006133bd8960c001516140fc565b89516040808c015160608d0151825160008152602081019093526133eb9392309291908e906044810161516f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918b015160c08c0151925163079b42a160e21b81529193503392631e6d0a849261345a9291869164200000000091909114908b906004016150cb565b6000604051808303816000875af1158015613479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134a19190810190615114565b604051631fb6491d60e11b81529095503390633f6c923a906134c79088906004016144df565b600060405180830381865afa1580156134e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350c9190810190614f44565b955061354860006135436135238c608001516141bb565b61353e6135338b60e001516141bb565b8b6101000151614225565b61423b565b614225565b610100870152505b61355f86866101000151614193565b93505b505050935093915050565b60405168383ab13634b9b432b960b91b60208201526bffffffffffffffffffffffff19606084901b1660298201526001600160e01b031960e083901b16603d8201526000906041015b60405160208183030381529060405280519060200120905092915050565b60408051606081018252600080825260208201819052918101829052604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261366d9190810190614dcd565b905060008160008151811061368457613684614c7b565b602002602001015160001c90506000826001815181106136a6576136a6614c7b565b602002602001015160001c905060008211945084156136de576001600160801b03808316855281166020850152608081901c60408501525b5050509250929050565b604051631528e57f60e31b81526001600160a01b038085166004830152831660248201526000604482015263ffffffff8216606482015273__SlotsBitmapLibrary____________________9063a9472bf89060840160006040518083038186803b15801561375657600080fd5b505af415801561376a573d6000803e3d6000fd5b50505050505050565b600061379d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137f35760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016103e8565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190614bf8565b61385d61118a565b146138b65760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016103e8565b6001600160a01b038116300361390e5760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016103e8565b613936817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc61395f61118a565b604080519182526001600160a01b03841660208301520160405180910390a150565b6040805160608101825260008082526020820181905291810182905260006139a9858561356d565b92506139b586846135d4565b92509050806139d65760405162461bcd60e51b81526004016103e890614c30565b50935093915050565b866001600160a01b031663cf97256d8785602001516001600160801b0316866000015186613a0d9190614a3d565b6001600160801b0316613a1f90614aea565b613a299190614a65565b6040518363ffffffff1660e01b8152600401613a46929190614b06565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050613aae878785604001516001600160801b0316866000015186613a9b9190614a3d565b6001600160801b031661086d9190614a65565b82516001600160801b03831684526001600160a01b03881663a1b2bf8b86613ad587613067565b6040518363ffffffff1660e01b8152600401613af29291906149f9565b600060405180830381600087803b158015613b0c57600080fd5b505af1158015613b20573d6000803e3d6000fd5b505050508563ffffffff16876001600160a01b0316896001600160a01b03167f81e37f3d9f16cbf29a62d6a1c21d79b23ef29b54124ec44af43a50fffb9304f3848789604001518a6020015189604051613b7e9594939291906151d5565b60405180910390a46040516379359f6f60e01b81526001600160a01b0388811660048301528916906379359f6f90602401602060405180830381865afa158015613bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf09190614e9d565b156132f05760405162461bcd60e51b81526020600482015260126024820152714944413a20455f4c4f575f42414c414e434560701b60448201526064016103e8565b60608073__SlotsBitmapLibrary____________________6306967a8c85856000600160801b6040518563ffffffff1660e01b8152600401613c779493929190614ca7565b600060405180830381865af4158015613c94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cbc9190810190615211565b909250905060005b8151811015613d1d57613cf084838381518110613ce357613ce3614c7b565b602002602001015161403d565b828281518110613d0257613d02614c7b565b6020908102919091010152613d16816152d5565b9050613cc4565b509250929050565b6000613d2f6142e9565b604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613d84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dac9190810190614dcd565b9050600081600081518110613dc357613dc3614c7b565b602002602001015160001c9050600082600181518110613de557613de5614c7b565b602002602001015160001c905060008211945084156136de57606082811c60208087019190915283901c63ffffffff9081166040870152831685526001600160801b03821690850152608081811c908501525050509250929050565b600080836001600160a01b0316634b61cc33308564010000000060016040518563ffffffff1660e01b8152600401613e7c9493929190614ca7565b600060405180830381865afa158015613e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec19190810190614dcd565b905080600081518110613ed657613ed6614c7b565b602002602001015160001c91505092915050565b604051630a32470160e41b81526001600160a01b03808516600483015283166024820152600060448201819052600160801b6064830152608482018390529073__SlotsBitmapLibrary____________________9063a32470109060a401602060405180830381865af4158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8991906152ee565b949350505050565b604051636c2d9f2f60e01b8152306004820152602481018290526002604482015260009081906001600160a01b03851690636c2d9f2f90606401600060405180830381865afa158015613fe8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140109190810190614dcd565b905060008160008151811061402757614027614c7b565b6020908102919091010151151595945050505050565b604080516b39bab139b1b934b83a34b7b760a11b6020820152606084811b6bffffffffffffffffffffffff1916602c830152918101839052600091016135b6565b6020810151608082015160a08301518351604051630768fabb60e41b8152606094339463768fabb0946140b5948a9460040161530b565b6000604051808303816000875af11580156140d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190615114565b6000640100000000820361411857506330d9c91560e01b919050565b64040000000082036141325750630221347d60e61b919050565b641000000000820361414c5750635f9e7d7760e01b919050565b6402000000008203614166575063d86ed3e560e01b919050565b6408000000008203614180575063230dbd2960e01b919050565b506353c11f9960e01b919050565b919050565b604051634c4d861f60e11b8152606090339063989b0c3e906140b59086908690600401615350565b60006001600160ff1b038211156130635760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016103e8565b60008183136142345781612cfc565b5090919050565b600081831361424a5782612cfc565b50919050565b6040805160c0810182526000808252602082018190529181019190915260608101614294604080516060810182526000808252602082018190529181019190915290565b81526020016142a16142e9565b8152602001606081525090565b6040805160e0810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461115857600080fd5b63ffffffff8116811461115857600080fd5b80356001600160801b038116811461418e57600080fd5b60008083601f8401126143c257600080fd5b5081356001600160401b038111156143d957600080fd5b6020830191508360208285010111156143f157600080fd5b9250929050565b60008060008060008060a0878903121561441157600080fd5b863561441c81614372565b9550602087013561442c81614387565b9450604087013561443c81614372565b935061444a60608801614399565b925060808701356001600160401b0381111561446557600080fd5b61447189828a016143b0565b979a9699509497509295939492505050565b60005b8381101561449e578181015183820152602001614486565b838111156144ad576000848401525b50505050565b600081518084526144cb816020860160208601614483565b601f01601f19169290920160200192915050565b602081526000612cfc60208301846144b3565b60008060006060848603121561450757600080fd5b833561451281614372565b9250602084013561452281614372565b9150604084013561453281614387565b809150509250925092565b60008060008060008060a0878903121561455657600080fd5b863561456181614372565b9550602087013561457181614372565b9450604087013561458181614387565b9350606087013561444a81614372565b6000602082840312156145a357600080fd5b8135612cfc81614372565b600080600080608085870312156145c457600080fd5b84356145cf81614372565b935060208501356145df81614372565b925060408501356145ef81614387565b915060608501356145ff81614372565b939692955090935050565b60008060008060006080868803121561462257600080fd5b853561462d81614372565b9450602086013561463d81614372565b9350604086013561464d81614387565b925060608601356001600160401b0381111561466857600080fd5b614674888289016143b0565b969995985093965092949392505050565b60008060008060006080868803121561469d57600080fd5b85356146a881614372565b945060208601356146b881614387565b935061464d60408701614399565b600080600080608085870312156146dc57600080fd5b84356146e781614372565b935060208501356146f781614372565b9250604085013561470781614387565b9396929550929360600135925050565b60008060006060848603121561472c57600080fd5b833561473781614372565b9250602084013561474781614372565b929592945050506040919091013590565b6000806040838503121561476b57600080fd5b823561477681614372565b9150602083013561478681614372565b809150509250929050565b600081518084526020808501945080840160005b838110156147ca5781516001600160801b0316875295820195908201906001016147a5565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156148175781516001600160a01b0316845292840192908401906001016147f2565b5050508381038285015285518082528683019183019060005b8181101561485257835163ffffffff1683529284019291840191600101614830565b505084810360408601526148668187614791565b98975050505050505050565b60008060008060006080868803121561488a57600080fd5b853561489581614372565b945060208601356148a581614387565b93506040860135925060608601356001600160401b0381111561466857600080fd5b600080604083850312156148da57600080fd5b82356148e581614372565b946020939093013593505050565b6000806000806060858703121561490957600080fd5b843561491481614372565b9350602085013561492481614387565b925060408501356001600160401b0381111561493f57600080fd5b61494b878288016143b0565b95989497509550505050565b6020808252601390820152724944413a20455f4e4f5f5a45524f5f5355425360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156149ad576149ad614984565b500190565b6000828210156149c4576149c4614984565b500390565b600081518084526020808501945080840160005b838110156147ca578151875295820195908201906001016149dd565b828152604060208201526000613f8960408301846149c9565b60006001600160801b03808316818516808303821115614a3457614a34614984565b01949350505050565b60006001600160801b0383811690831681811015614a5d57614a5d614984565b039392505050565b60006001600160ff1b0381841382841380821686840486111615614a8b57614a8b614984565b600160ff1b6000871282811687830589121615614aaa57614aaa614984565b60008712925087820587128484161615614ac657614ac6614984565b87850587128184161615614adc57614adc614984565b505050929093029392505050565b6000600160ff1b8201614aff57614aff614984565b5060000390565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526001600160801b0383166020820152606060408201819052600090614b52908301846144b3565b95945050505050565b6001600160a01b038516815263ffffffff841660208201526001600160801b0383166040820152608060608201819052600090614b9a908301846144b3565b9695505050505050565b6001600160a01b0383168152604060208201819052600090613f89908301846144b3565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090614b52908301846144b3565b600060208284031215614c0a57600080fd5b5051919050565b6000816000190483118215151615614c2b57614c2b614984565b500290565b6020808252600f908201526e092888274408abe9c9ebe929c888ab608b1b604082015260600190565b600082614c7657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614d0957614d09614cd0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d3757614d37614cd0565b604052919050565b60006001600160401b03821115614d5857614d58614cd0565b5060051b60200190565b600082601f830112614d7357600080fd5b81516020614d88614d8383614d3f565b614d0f565b82815260059290921b84018101918181019086841115614da757600080fd5b8286015b84811015614dc25780518352918301918301614dab565b509695505050505050565b600060208284031215614ddf57600080fd5b81516001600160401b03811115614df557600080fd5b613f8984828501614d62565b600080821280156001600160ff1b0384900385131615614e2357614e23614984565b600160ff1b8390038412811615614e3c57614e3c614984565b50500190565b600063ffffffff808316818103614e5b57614e5b614984565b6001019392505050565b805161418e81614372565b600060208284031215614e8257600080fd5b8151612cfc81614372565b8051801515811461418e57600080fd5b600060208284031215614eaf57600080fd5b612cfc82614e8d565b805160ff8116811461418e57600080fd5b80516001600160e01b03198116811461418e57600080fd5b600082601f830112614ef257600080fd5b81516001600160401b03811115614f0b57614f0b614cd0565b614f1e601f8201601f1916602001614d0f565b818152846020838601011115614f3357600080fd5b613f89826020830160208701614483565b600060208284031215614f5657600080fd5b81516001600160401b0380821115614f6d57600080fd5b908301906101608286031215614f8257600080fd5b614f8a614ce6565b614f9383614eb8565b8152614fa160208401614eb8565b602082015260408301516040820152614fbc60608401614e65565b6060820152614fcd60808401614ec9565b608082015260a083015182811115614fe457600080fd5b614ff087828601614ee1565b60a08301525060c083015160c082015260e083015160e0820152610100915081830151828201526101209150615027828401614e65565b82820152610140915061503b828401614e65565b91810191909152949350505050565b60008060006060848603121561505f57600080fd5b61506884614e8d565b925061507660208501614e8d565b9150604084015190509250925092565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906150b9908301856144b3565b828103608084015261486681856144b3565b6001600160a01b03851681526080602082018190526000906150ef908301866144b3565b8415156040840152828103606084015261510981856144b3565b979650505050505050565b60006020828403121561512657600080fd5b81516001600160401b0381111561513c57600080fd5b613f8984828501614ee1565b60018060a01b0384168152826020820152606060408201526000614b5260608301846149c9565b6001600160a01b038781168252861660208201526040810185905260c0606082018190526000906151a2908301866144b3565b82810360808401526151b481866144b3565b905082810360a08401526151c881856144b3565b9998505050505050505050565b60006001600160801b0380881683528087166020840152808616604084015280851660608401525060a0608083015261510960a08301846144b3565b6000806040838503121561522457600080fd5b82516001600160401b038082111561523b57600080fd5b818501915085601f83011261524f57600080fd5b8151602061525f614d8383614d3f565b82815260059290921b8401810191818101908984111561527e57600080fd5b948201945b838610156152a557855161529681614387565b82529482019490820190615283565b918801519196509093505050808211156152be57600080fd5b506152cb85828601614d62565b9150509250929050565b6000600182016152e7576152e7614984565b5060010190565b60006020828403121561530057600080fd5b8151612cfc81614387565b60a08152600061531e60a08301886144b3565b6001600160a01b0396871660208401526040830195909552506060810192909252909216608090920191909152919050565b60408152600061536360408301856144b3565b9050826020830152939250505056fea26469706673582212207ec96719b31a750b96557a86e8487a8e23f9dce3c210c0886ab36a6a7f5c522a64736f6c634300080d0033",
|
|
1025
|
+
"metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ISuperfluid\",\"name\":\"host\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"uuid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"codeAddress\",\"type\":\"address\"}],\"name\":\"CodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IndexDistributionClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexSubscribed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUnitsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUnsubscribed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldIndexValue\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newIndexValue\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"totalUnitsPending\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"totalUnitsApproved\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"IndexUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SubscriptionDistributionClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"SubscriptionUnitsUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SLOTS_BITMAP_LIBRARY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"agreementType\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"approveSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateDistribution\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"actualAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"newIndexValue\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"createIndex\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"deleteSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"distribute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCodeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"codeAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"}],\"name\":\"getIndex\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"indexValue\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalUnitsApproved\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalUnitsPending\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"getSubscription\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"pendingDistribution\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"agreementId\",\"type\":\"bytes32\"}],\"name\":\"getSubscriptionByID\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"pendingDistribution\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"listSubscriptions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"publishers\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"indexIds\",\"type\":\"uint32[]\"},{\"internalType\":\"uint128[]\",\"name\":\"unitsList\",\"type\":\"uint128[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"realtimeBalanceOf\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"dynamicBalance\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedDeposit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"revokeSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"updateCode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"indexValue\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"updateIndex\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISuperfluidToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"indexId\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"units\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"ctx\",\"type\":\"bytes\"}],\"name\":\"updateSubscription\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"newCtx\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Superfluid\",\"details\":\"Please read IInstantDistributionAgreementV1 for implementation notes.For more technical notes, please visit protocol-monorepo wiki area.\",\"kind\":\"dev\",\"methods\":{\"agreementType()\":{\"details\":\"ISuperAgreement.agreementType implementation\"},\"approveSubscription(address,address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.approveSubscription implementation\"},\"calculateDistribution(address,address,uint32,uint256)\":{\"details\":\"IInstantDistributionAgreementV1.calculateDistribution implementation\"},\"claim(address,address,uint32,address,bytes)\":{\"details\":\"Claim pending distributions\",\"params\":{\"ctx\":\"Context bytes (see ISuperfluid.sol for Context struct)\",\"indexId\":\"Id of the index\",\"publisher\":\"The publisher of the index\",\"subscriber\":\"The subscriber's address\",\"token\":\"Super token address\"}},\"createIndex(address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.createIndex implementation\"},\"deleteSubscription(address,address,uint32,address,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.deleteSubscription implementation\"},\"distribute(address,uint32,uint256,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.distribute implementation\"},\"getCodeAddress()\":{\"details\":\"Get current implementation code address.\"},\"getIndex(address,address,uint32)\":{\"details\":\"IInstantDistributionAgreementV1.getIndex implementation\"},\"getSubscription(address,address,uint32,address)\":{\"details\":\"IInstantDistributionAgreementV1.getSubscription implementation\"},\"getSubscriptionByID(address,bytes32)\":{\"details\":\"IInstantDistributionAgreementV1.getSubscriptionByID implementation\"},\"listSubscriptions(address,address)\":{\"details\":\"IInstantDistributionAgreementV1.listSubscriptions implementation\"},\"proxiableUUID()\":{\"details\":\"Proxiable UUID marker function, this would help to avoid wrong logic contract to be used for upgrading. NOTE: The semantics of the UUID deviates from the actual UUPS standard, where it is equivalent of _IMPLEMENTATION_SLOT.\"},\"realtimeBalanceOf(address,address,uint256)\":{\"details\":\"ISuperAgreement.realtimeBalanceOf implementation\"},\"revokeSubscription(address,address,uint32,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.revokeSubscription implementation\"},\"updateIndex(address,uint32,uint128,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.updateIndex implementation\"},\"updateSubscription(address,uint32,address,uint128,bytes)\":{\"details\":\"IInstantDistributionAgreementV1.updateSubscription implementation\"}},\"stateVariables\":{\"_MAX_NUM_SUBS\":{\"details\":\"Maximum number of subscriptions a subscriber can have\"},\"_PUBLISHER_DEPOSIT_STATE_SLOT_ID\":{\"details\":\"Publisher state slot id for storing its deposit amount\"},\"_SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID\":{\"details\":\"Subscriber state slot id for storing subs bitmap\"},\"_SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START\":{\"details\":\"Subscriber state slot id starting ptoint for subscription data\"},\"_UNALLOCATED_SUB_ID\":{\"details\":\"A special id that indicating the subscription is not approved yet\"}},\"title\":\"InstantDistributionAgreementV1 contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/agreements/InstantDistributionAgreementV1.sol\":\"InstantDistributionAgreementV1\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x4823752b07b8ea4ca971b217e39457930e7cb103c2c91e2a29729e5ca907e4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f319af26a9ade3e6cf3698bf1b84aa6213bdd7a76606ea9ba56ced163593934\",\"dweb:/ipfs/QmZ2u9zen5Htan4dSP1RZCY2XqB9HUwqkNCMzdn7aV2jWc\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC777/IERC777.sol\":{\"keccak256\":\"0xe4e0b7e3f0265ffaa565d26acd2d45f2633f19127ed625e5a05a9f201a87a667\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1762b5bc15a009b5f092ccf547b81e0827c8705884f18e0623e497658514a7ed\",\"dweb:/ipfs/QmTtmVQYuynan3j2uVjdjjRJS1mr7LPRgxSZNnfqC7oxkz\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x5c6caab697d302ad7eb59c234a4d2dbc965c1bae87709bd2850060b7695b28c7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb62abcee612c175f1b9bc70e5dfe5bd23473c99987ade6e80e291f68dc60ff1\",\"dweb:/ipfs/QmZCMajhG7FtRYNDwBchXN89mXR6HLPVzr9732qfUdNf9E\"]},\"project:/contracts/agreements/AgreementBase.sol\":{\"keccak256\":\"0xa34a1b2dd83146a5ed280509f71a1c020ce1985e603da0fc3599eff71d234ab4\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://0c9e9eb4f857ddef830bd7bc9523151f7de82bf4ecfca1aeb9e8de1588e2e07d\",\"dweb:/ipfs/QmaFU7E1XGTYiHCQicCjLNSzYyBgEHdR5pcC64MzCCsNbC\"]},\"project:/contracts/agreements/AgreementLibrary.sol\":{\"keccak256\":\"0x4ad8252da82acdad4fe2b7a4fd1ebef8a7059b67c06f2af84ce86ded3ca531a4\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://2f1c14d9882316ab33e89329ca47449f2bb5a836df5a7abfb91a823fd428b546\",\"dweb:/ipfs/QmVJQxv5e4Ki19CzoVDHbqvuBrRM6XQa7igUmXTHBANcR4\"]},\"project:/contracts/agreements/InstantDistributionAgreementV1.sol\":{\"keccak256\":\"0xc860edfc5243a6f0a32f41dd87501acc49645cf610b67ceeb2dc015451d3839f\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://db6999d46b894d9c04fbba3a5aa6dd26837ebea16b6ade3f14fd60dfddc92a2d\",\"dweb:/ipfs/QmRwkp2aDY91PwMFun3Fux5Ac6cYMr17DRnmUfSV5qxTsX\"]},\"project:/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol\":{\"keccak256\":\"0x6ef345136a4f7507d08e657ac3f09539353704a2146b8116d9983878d3113d7e\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://360bb0f7e87f787e999c74ddaf2d91dd9e3ed4fc1f9642f4623c5baa4ad28471\",\"dweb:/ipfs/QmfH6a4PtzQQVk6cNAwM6jHLutFVuuW7NANGcWAX1nA4ch\"]},\"project:/contracts/interfaces/superfluid/Definitions.sol\":{\"keccak256\":\"0x199095781e4221b6015d859558da09977f79199f38d342ab4899c2cecdf8cec1\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://9fd3a5a8b16d8517e2af10e20390a9af5adbfa4e783e3a7dd89eb4588db98385\",\"dweb:/ipfs/QmPDtGR43DeMMVsHjUh7FYzMGsFKPpGriRkaahFpN5T5d3\"]},\"project:/contracts/interfaces/superfluid/ISuperAgreement.sol\":{\"keccak256\":\"0xc3a6a907245116bcecc70fe4b207454012e8ce4fa190228fb8bbe39e0b1bc5cf\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://83c116bdae48685d20e5a27c942111e685ec1ef6334e7ff6f6d9af66edbd8025\",\"dweb:/ipfs/QmTnVuNTaRFiDmkAmDk7NFYdfQTW1kqgBZiY2exC6k8jDx\"]},\"project:/contracts/interfaces/superfluid/ISuperApp.sol\":{\"keccak256\":\"0x42b604992cf67321cc12e8bed16543df0db4eaf125b8c1c82c330ebbeb20c014\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://7c18b00caf7b8be7e11f75284fb96263ce48a3984d56f2a91ec44cae4413d2fc\",\"dweb:/ipfs/QmWVzdW9KnkwAVe9g5zRuMoqCf7N89AoBfzzRr8puw5d8a\"]},\"project:/contracts/interfaces/superfluid/ISuperToken.sol\":{\"keccak256\":\"0xcff22ed43df0f34a645e6cbe0d7c5fd08f204d769e9095bc59d7c2fe6d11b7d6\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://944b8c5a37839b40ec8ee1ccfecbaf007808a61ea16c7b1351a7184606772032\",\"dweb:/ipfs/QmbUKZqZtVfqZMKYnQUygE4svatKuN9kT2ibrnxMuWXR7n\"]},\"project:/contracts/interfaces/superfluid/ISuperTokenFactory.sol\":{\"keccak256\":\"0x68a466c978557e47bd7385b1d7d78f1c8fb07462a870efc5a791008e33a4f535\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://d109879bdb7f022560a792af2ff481df729bf1b4b8e1831b8022f4d12892d41d\",\"dweb:/ipfs/QmRSWqHq8CP5XWgyV4mJpPxMg33s312s2K5ndHRHVqqZ8n\"]},\"project:/contracts/interfaces/superfluid/ISuperfluid.sol\":{\"keccak256\":\"0xf16efd1ba72322e77e0d936b723c0e71eb14c23e11cf69efae8c7caa407012cf\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://ff4bb321b72dc3332984346e5b66ad131c6132101658fe6707d7a9d043f981ab\",\"dweb:/ipfs/QmXmVD2mZ3LRb7wQZ2VcrpYhtjm21zUe5hPDDDJA1WXbFz\"]},\"project:/contracts/interfaces/superfluid/ISuperfluidGovernance.sol\":{\"keccak256\":\"0xea33d20751ffea4f4446bc04f6c10194fb4da0803a988586d41d49cf4859731c\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://7716b1f5eec0a7ac8780d82de4f0274ecd7059be4eec46c82b0b7adce110f10b\",\"dweb:/ipfs/QmWRQafvdCBsyfDYnevXSav1AAz8uZRRBwh2be5Z3vSfVN\"]},\"project:/contracts/interfaces/superfluid/ISuperfluidToken.sol\":{\"keccak256\":\"0x3eec5a3bf337cd319c1918fd1b16f350cf5f6850ac71f6859066fbf86e734ff4\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://cda19a2f5ca18e79c1e2300c8efac84c718df76c4fb313f59f84264a4c6b398a\",\"dweb:/ipfs/QmfQiwgDH5Q64w5ufBnDzVaeWv6WCZ6fLTrYu1FSYfBGhq\"]},\"project:/contracts/interfaces/tokens/ERC20WithTokenInfo.sol\":{\"keccak256\":\"0x66708dae3fcd06e6fc0a46f2959fc2d1e6b9361f28598337339d26af8eb8c0f9\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://77b80718cec21b81ef190c19fb9fbe73913a95c71f7e6715f671bbe8a224dafc\",\"dweb:/ipfs/QmUdsc6DF2Bgih5VZm7sfaECjhGmwE7tAx8pMkzGQgVKQw\"]},\"project:/contracts/interfaces/tokens/TokenInfo.sol\":{\"keccak256\":\"0x70e573644a0ff271c0ccef526809e9d9ab4950ec58755ca84e833cde3b8f3df0\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://aea3709687cc37ba625f4cc882fbdb149a7bf5be5afe2b030203c8719641a77b\",\"dweb:/ipfs/QmVpvfR6ZheE5wNUK9CobaVBgVvEnEPkvjWF9cfwyZr7eQ\"]},\"project:/contracts/libs/SlotsBitmapLibrary.sol\":{\"keccak256\":\"0xa66bd7f04a6d0c6dd821270dc4a07b8c72edc75289c95a7883d30506d44f4a5a\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://565c45111409fa46cb9630de78b8387ac41ac74877d4982e0812aa862046344a\",\"dweb:/ipfs/QmZqBiB1RzjxVLCWUmbjsZE6vNU86qNsQALAeRz96powtR\"]},\"project:/contracts/upgradability/UUPSProxiable.sol\":{\"keccak256\":\"0xabe3beb46dff1433d7ae61fe470fc347967d5a5b09d48fa45f35ddb2735d61f2\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://ad0fdb3210d3b0ed62886decdeef62b43bdbdd59bd55fc5ea3d636e97fbfb65d\",\"dweb:/ipfs/QmPjd6ehqgoiHkrf2g2h9AZRxKakqxsGx1GTiy5DSwfYJg\"]},\"project:/contracts/upgradability/UUPSUtils.sol\":{\"keccak256\":\"0xe624225773a60f62c7a0687afb0536ba19a17e4e5605ae71e8af77a0287aca59\",\"license\":\"AGPLv3\",\"urls\":[\"bzz-raw://4294e5eb5b194477bca3b8ca04ca92a6fe72dd6cf8da8f0d942a4a86c41c1c7f\",\"dweb:/ipfs/QmdfPXZxJPaBjKNfC8joTcvEhWammJHzRACB1S18sFYfd7\"]}},\"version\":1}",
|
|
1026
|
+
"bytecode": "0x60a06040523480156200001157600080fd5b506040516200543c3803806200543c833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b6080516153a86200009460003960006110e201526153a86000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80637730599e116100ad578063acf4a6c211610071578063acf4a6c21461030d578063b6dacdb814610320578063b96731c214610342578063cd7245c514610355578063d787840a146103ad57600080fd5b80637730599e146102635780637fbc763914610289578063899baaec1461029c5780639b2e48bc146102cc578063acafa1b8146102fa57600080fd5b806346951954116100f457806346951954146101d957806350d75d25146101ee57806352d1902d146101f65780635b5340511461020c5780636041ae961461025057600080fd5b8063232d2b581461012657806323fc23f31461014f5780632e5e74c6146101935780633fd4176a146101a6575b600080fd5b6101396101343660046143f8565b6103c0565b60405161014691906144df565b60405180910390f35b61016261015d3660046144f2565b610ae2565b6040805194151585526001600160801b03938416602086015291831691840191909152166060820152608001610146565b6101396101a136600461453d565b610b4d565b6101c173__SlotsBitmapLibrary____________________81565b6040516001600160a01b039091168152602001610146565b6101ec6101e7366004614591565b6110d7565b005b6101c161115b565b6101fe61118a565b604051908152602001610146565b61021f61021a3660046145ae565b6111ee565b6040516101469493929190931515845291151560208401526001600160801b03166040830152606082015260800190565b61013961025e36600461460a565b6112c4565b7f8aedc3b5d4bf031e11a7e2940f7251c005698405d58e02e1c247fed3b1b3a6746101fe565b610139610297366004614685565b611718565b6102af6102aa3660046146c6565b611828565b604080519283526001600160801b03909116602083015201610146565b6102df6102da366004614717565b6118cc565b60408051938452602084019290925290820152606001610146565b61013961030836600461453d565b611ad7565b61013961031b36600461460a565b611f01565b61033361032e366004614758565b6124e1565b604051610146939291906147d5565b610139610350366004614872565b612736565b6103686103633660046148c7565b612836565b604080516001600160a01b03909616865263ffffffff9094166020860152911515928401929092526001600160801b039091166060830152608082015260a001610146565b6101396103bb3660046148f3565b612958565b60606001600160a01b0385166103f15760405162461bcd60e51b81526004016103e890614957565b60405180910390fd5b6103f9614250565b6104016142ae565b60606000806104468c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b90508060a00151925080606001519150506104658b828b8d6000612d03565b60808901521515602080890191909152606088019190915260408088018390529287528251908101909252600082526104a1918d918c91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050602086015191965050156105055764040000000060c08401526104fb8386612e43565b60a0850152610520565b64010000000060c084015261051a8386612e43565b60a08501525b8360200151801561053d575060808401515163ffffffff90811614155b156106185761058c8460800151608001516001600160801b0316896001600160801b03168660600151602001516001600160801b031661057d919061499a565b61058791906149b2565b612ffa565b6060850180516001600160801b03909216602090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518363ffffffff1660e01b81526004016105e19291906149f9565b600060405180830381600087803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b505050506107ff565b8360200151156106955761065d8460800151608001516001600160801b0316896001600160801b03168660600151604001516001600160801b031661057d919061499a565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518060a0016040528063ffffffff80168152602001826001600160a01b031681526020018b63ffffffff1681526020018560600151600001516001600160801b03168152602001896001600160801b031681525084608001819052508a6001600160a01b03166312a6a3f885604001516107148760800151613105565b6040518363ffffffff1660e01b81526004016107319291906149f9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50505050878460600151604001516107779190614a12565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916107af90613067565b6040518363ffffffff1660e01b81526004016107cc9291906149f9565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505b60008460800151608001516001600160801b031685608001516060015186606001516000015161082f9190614a3d565b6001600160801b03166108429190614a65565b905063ffffffff801685608001516000015163ffffffff16036108db576108728c8361086d84614aea565b6131ac565b6001600160a01b038c1663cf97256d8361088b84614aea565b6040518363ffffffff1660e01b81526004016108a8929190614b06565b600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050505b60405163cf97256d60e01b81526001600160a01b038d169063cf97256d90610909908d908590600401614b06565b600060405180830381600087803b15801561092357600080fd5b505af1158015610937573d6000803e3d6000fd5b505050508460200151156109dd5760608086015151608080880180516001600160801b039384169401939093528251918c16910152604086015190516001600160a01b038e169163a1b2bf8b9161098d90613105565b6040518363ffffffff1660e01b81526004016109aa9291906149f9565b600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b505050505b846020015115610a0c5764080000000060c085015260a0850151610a03908590886132fa565b9650610a2c9050565b64020000000060c085015260a0850151610a28908590886132fa565b9650505b8a63ffffffff16826001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398d8d88604051610a7a93929190614b1f565b60405180910390a4896001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c182524977848e8d88604051610acb9493929190614b5b565b60405180910390a350505050509695505050505050565b600080600080610b0b604080516060810182526000808252602082018190529181019190915290565b6000610b17888861356d565b9050610b2389826135d4565b90965091508515610b4257815160208301516040840151919650945092505b505093509350935093565b6060610b57614250565b610b5f6142ae565b600060606000610ba58c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015160a0909101519093509150506001600160a01b038816610bdc5760405162461bcd60e51b81526004016103e890614957565b896001600160a01b0316826001600160a01b031614610c325760405162461bcd60e51b81526020600482015260126024820152711251104e881157d393d517d0531313d5d15160721b60448201526064016103e8565b610c408b8b8a8c6001612d03565b6080890152506060870152604080870182905291865281516020810190925260008252610c70918d918b91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c087015250909550610cc190508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b0390921691610cf391614a3d565b6001600160801b0316610d069190614a65565b60808601515190915063ffffffff90811614610d5357846080015160800151856060015160200151610d389190614a3d565b60608601516001600160801b03909116602090910152610d86565b846080015160800151856060015160400151610d6f9190614a3d565b60608601516001600160801b039091166040909101525b8b6001600160a01b031663a1b2bf8b8660000151610da78860600151613067565b6040518363ffffffff1660e01b8152600401610dc49291906149f9565b600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b5050505060808501515163ffffffff90811614610e1c57610e1c8c8a8760800151600001516136e8565b60808501515163ffffffff1663fffffffe1901610eaa57610e418c8c61086d84614aea565b6001600160a01b038c1663cf97256d8c610e5a84614aea565b6040518363ffffffff1660e01b8152600401610e77929190614b06565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050505b6040858101519051632704839760e01b81526004810191909152600260248201526001600160a01b038d1690632704839790604401600060405180830381600087803b158015610ef957600080fd5b505af1158015610f0d573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038f16925063cf97256d9150610f3f908c908590600401614b06565b600060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151610f8d908590886132fa565b9050809650508963ffffffff168b6001600160a01b03168d6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d1428c86604051610fdf929190614ba4565b60405180910390a4886001600160a01b03168c6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558d8d8660405161102e93929190614bc8565b60405180910390a38963ffffffff168b6001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398c60008760405161108593929190614b1f565b60405180910390a4886001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c1825249778d8d600087604051610acb9493929190614b5b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461114f5760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920686f73742063616e2075706461746520636f64650000000000000060448201526064016103e8565b61115881613773565b50565b60006111857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000306001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111859190614bf8565b60008060008060008061121a604080516060810182526000808252602082018190529181019190915290565b6112226142e9565b6112308c8c8b8d6000612d03565b909b509296509094509250905087611259576000806000809750975097509750505050506112b9565b8051608082015163ffffffff9182169091141597509550866112af5780608001516001600160801b0316816060015183600001516112979190614a3d565b6001600160801b03166112aa9190614c11565b6112b2565b60005b9450505050505b945094509450949050565b60606112ce614250565b6112d66142ae565b60006060600061131c8b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a0015191505061133b8a8a848b6001612d03565b6080890181905260608901929092525060408701919091529085525163ffffffff1663fffffffe19016113b05760405162461bcd60e51b815260206004820152601860248201527f4944413a20455f535542535f4e4f545f415050524f564544000000000000000060448201526064016103e8565b6113cf8a8a866040015160405180602001604052806000815250612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c08701525090955061142090508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b039092169161145291614a3d565b6001600160801b03166114659190614a65565b90508460800151608001518560600151602001516114839190614a3d565b6060860180516001600160801b0390921660209092019190915260808087015101519051604001516114b59190614a12565b6060860180516001600160801b03909216604090920191909152855190516001600160a01b038d169163a1b2bf8b916114ed90613067565b6040518363ffffffff1660e01b815260040161150a9291906149f9565b600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050505061154f8b848760800151600001516136e8565b606080860151516080870180516001600160801b039092169190920152805163ffffffff9052604086015190516001600160a01b038d169163a1b2bf8b9161159690613105565b6040518363ffffffff1660e01b81526004016115b39291906149f9565b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506116139086908590600401614b06565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151611661908590886132fa565b9050809650508863ffffffff168a6001600160a01b03168c6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d14286866040516116b3929190614ba4565b60405180910390a4826001600160a01b03168b6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558c8c8660405161170293929190614bc8565b60405180910390a3505050505095945050505050565b6060600061175c8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806117728a848b613981565b9150915080600001516001600160801b0316886001600160801b031610156117d05760405162461bcd60e51b81526020600482015260116024820152704944413a20455f494e4445585f47524f5760781b60448201526064016103e8565b6117e38a848b85858d8a60a001516139df565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929d9c50505050505050505050505050565b6000806000611837868661356d565b905060008061184689846135d4565b91509150816118675760405162461bcd60e51b81526004016103e890614c30565b60008160400151826020015161187d9190614a12565b6001600160801b031690506000611897610587838a614c59565b83519091506118a7908290614a12565b95506118bc826001600160801b038316614c11565b9650505050505094509492505050565b60008060006060806118de8888613c32565b909250905060005b81518163ffffffff161015611abb5760006118ff6142e9565b600080868563ffffffff168151811061191a5761191a614c7b565b6020026020010151905061194d8d878763ffffffff168151811061194057611940614c7b565b6020026020010151613d25565b90945092508361195f5761195f614c91565b8063ffffffff16836000015163ffffffff161461197e5761197e614c91565b6001600160a01b038d16634b61cc33308e6119a363ffffffff8616600160801b61499a565b60016040518563ffffffff1660e01b81526004016119c49493929190614ca7565b600060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a099190810190614dcd565b600081518110611a1b57611a1b614c7b565b6020026020010151915050611a49604080516060810182526000808252602082018190529181019190915290565b611a538d836135d4565b909450905083611a6557611a65614c91565b82608001516001600160801b031683606001518260000151611a879190614a3d565b6001600160801b0316611a9a9190614a65565b611aa4908b614e01565b99505050505080611ab490614e42565b90506118e6565b50611ac68888613e41565b935060009250505093509350939050565b6060611b198784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b506001600160a01b038416611b405760405162461bcd60e51b81526004016103e890614957565b611b48614250565b611b506142ae565b611b5e8989888a6001612d03565b6080870181905260608701929092525060408501919091529083525163ffffffff90811614611bc65760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b60008260800151608001516001600160801b0316836080015160600151846060015160000151611bf69190614a3d565b6001600160801b0316611c099190614c11565b9050611c2a8a8a856040015160405180602001604052806000815250612e15565b915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505082159150611eba90505764040000000060c0830152611c828285612e43565b60a0840152611c958a8a61086d84614aea565b6001600160a01b038a1663cf97256d8a611cae84614aea565b6040518363ffffffff1660e01b8152600401611ccb929190614b06565b600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50505050606083810151516080850180516001600160801b039092169190920152604084015190516001600160a01b038c169163a1b2bf8b91611d3b90613105565b6040518363ffffffff1660e01b8152600401611d589291906149f9565b600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038d16925063cf97256d9150611db8908a908590600401614b06565b600060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050508763ffffffff16896001600160a01b03168b6001600160a01b03167f467eccd248ef31c8bcef16d94856855799a8783aeef10f3759e43614059a6bb18a85604051611e36929190614b06565b60405180910390a4604080516001600160a01b038b8116825263ffffffff8b166020830152918101839052818916918c16907f48a3d91d4a07e4982b081260e24f922bd33bb965882772d6de19c922c3eabdea9060600160405180910390a364080000000060c083015260a0830151611eb1908390866132fa565b9450611ef49050565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611f0b614250565b611f136142ae565b600060606000611f598b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a00151915050611f788a8a848b6000612d03565b6080890152158015602089015260608801919091526040870191909152908552611fee5760808401515163ffffffff90811614611fee5760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040808a0151815160208101909252918152949950612047948f94508e9350909150612e15565b925083602001516121705764010000000060c08401526120678386612e43565b60a08086019190915260408051918201815260008083526001600160a01b038c16602084015263ffffffff8b1691830191909152606080870151516001600160801b03169083015260808083019190915285015283516120ca908b908490613eea565b60808501805163ffffffff909216909152604085015190516001600160a01b038c16916312a6a3f8916120fc90613105565b6040518363ffffffff1660e01b81526004016121199291906149f9565b600060405180830381600087803b15801561213357600080fd5b505af1158015612147573d6000803e3d6000fd5b505064020000000060c0860152505060a0840151612167908490876132fa565b95506124319050565b64040000000060c08401526121858386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b03909216916121b791614a3d565b6001600160801b03166121ca9190614a65565b905084608001516080015185606001516020018181516121ea9190614a12565b6001600160801b0316905250608080860151015160608601516040018051612213908390614a3d565b6001600160801b0316905250845160608601516001600160a01b038d169163a1b2bf8b9161224090613067565b6040518363ffffffff1660e01b815260040161225d9291906149f9565b600060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b5050505061229e8b8b8361086d90614aea565b6001600160a01b038b1663cf97256d8b6122b784614aea565b6040518363ffffffff1660e01b81526004016122d4929190614b06565b600060405180830381600087803b1580156122ee57600080fd5b505af1158015612302573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506123349086908590600401614b06565b600060405180830381600087803b15801561234e57600080fd5b505af1158015612362573d6000803e3d6000fd5b5050506060808701515160808801516001600160801b0390911691015250845161238f908c908590613eea565b60808601805163ffffffff909216909152604086015190516001600160a01b038d169163a1b2bf8b916123c190613105565b6040518363ffffffff1660e01b81526004016123de9291906149f9565b600060405180830381600087803b1580156123f857600080fd5b505af115801561240c573d6000803e3d6000fd5b505064080000000060c0870152505060a085015161242c908590886132fa565b965050505b8763ffffffff16896001600160a01b03168b6001600160a01b03167f492d2641617cfaf24ac7328f85bc5bdf5113537d78dc7671afa4f49a73f053c2858560405161247d929190614ba4565b60405180910390a4816001600160a01b03168a6001600160a01b03167fc0b8396b655615cdb85fe462a9a1792480816f909cd46d9517a940b386dfbf6b8b8b856040516124cc93929190614bc8565b60405180910390a35050505095945050505050565b60608060608060606124f38787613c32565b909250905060006125026142e9565b82516001600160401b0381111561251b5761251b614cd0565b604051908082528060200260200182016040528015612544578160200160208202803683370190505b50965082516001600160401b0381111561256057612560614cd0565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b50955082516001600160401b038111156125a5576125a5614cd0565b6040519080825280602002602001820160405280156125ce578160200160208202803683370190505b50945060005b83518163ffffffff16101561272a576000858263ffffffff16815181106125fd576125fd614c7b565b602002602001015190506000858363ffffffff168151811061262157612621614c7b565b602002602001015190506126358c82613d25565b90955093508461264757612647614c91565b8163ffffffff16846000015163ffffffff161461266657612666614c91565b83602001518a8463ffffffff168151811061268357612683614c7b565b60200260200101906001600160a01b031690816001600160a01b0316815250508360400151898463ffffffff16815181106126c0576126c0614c7b565b602002602001019063ffffffff16908163ffffffff16815250508360800151888463ffffffff16815181106126f7576126f7614c7b565b60200260200101906001600160801b031690816001600160801b03168152505050508061272390614e42565b90506125d4565b50505050509250925092565b6060600061277a8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806127908a848b613981565b915091506000816040015182602001516127aa9190614a12565b6001600160801b0316905080156127f05760006127ca610587838c614c59565b90506127ee8c868d87878689600001516127e49190614a12565b8c60a001516139df565b505b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b6000806000806000806000612864604080516060810182526000808252602082018190529181019190915290565b61286c6142e9565b6128768b8b613d25565b9094509050836128b95760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b80602001519850806040015197506128d1898961356d565b92506128dd8b846135d4565b9094509150836128ef576128ef614c91565b8051608082015163ffffffff9182169091141597509550866129455780608001516001600160801b03168160600151836000015161292d9190614a3d565b6001600160801b03166129409190614c11565b612948565b60005b9450505050509295509295909350565b6060600061299c8685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015190915060006129b0828861356d565b90506129bc8882613f91565b156129ff5760405162461bcd60e51b81526020600482015260136024820152724944413a20455f494e4445585f45584953545360681b60448201526064016103e8565b876001600160a01b03166312a6a3f882612a50604051806060016040528060006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815250613067565b6040518363ffffffff1660e01b8152600401612a6d9291906149f9565b600060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050508663ffffffff16826001600160a01b0316896001600160a01b03167f01ab8663165edfb7390d9e5f75d960a66dacf4f01fa9787e3a731c870d0da9218660a00151604051612aed91906144df565b60405180910390a485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929b9a5050505050505050505050565b612b40614317565b336001600160a01b0316836001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bac9190614e70565b6001600160a01b031614612bf65760405162461bcd60e51b81526020600482015260116024820152701d5b985d5d1a1bdc9a5e9959081a1bdcdd607a1b60448201526064016103e8565b604051632fd0a1cd60e21b8152339063bf42873490612c199085906004016144df565b602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5a9190614e9d565b612c945760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840c6e8f60ab1b60448201526064016103e8565b604051631fb6491d60e11b81523390633f6c923a90612cb79085906004016144df565b600060405180830381865afa158015612cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190614f44565b9392505050565b6040805160608101825260008082526020820181905291810182905281906000612d2b6142e9565b6000612d378a8961356d565b9550612d43898761403d565b9450612d4f8b876135d4565b9450905080612d705760405162461bcd60e51b81526004016103e890614c30565b612d7a8b86613d25565b90935091508615612e075782612dc35760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b896001600160a01b031682602001516001600160a01b031614612de857612de8614c91565b8763ffffffff16826040015163ffffffff1614612e0757612e07614c91565b509550955095509550959050565b612e1d6142ae565b6001600160a01b0394851681529290931660208301526040820152606081019190915290565b6020820151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061504a565b91945092509050828015612ecd575081155b15612ff1576000612ede868861407e565b90508660c001518216600003612fe3576000612efd8860c001516140fc565b88516040808b015160608c015182516000815260208101909352612f2993923092919060448101615086565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918a015160c08b01519251633a020f0160e11b815291935033926374041e0292612f9892918691641000000000919091149088906004016150cb565b6000604051808303816000875af1158015612fb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fdf9190810190615114565b9550505b612fee866000614193565b50505b50505092915050565b60006001600160801b038211156130635760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016103e8565b5090565b604080516002808252606080830184529260208301908036833701905050905081600001516001600160801b0316600160801b1760001b816000815181106130b1576130b1614c7b565b602002602001018181525050608082604001516001600160801b0316901b82602001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b602002602001018181525050919050565b6040805160028082526060808301845292602083019080368337019050509050816000015163ffffffff166020836040015163ffffffff16901b606084602001516001600160a01b0316901b171760001b8160008151811061316957613169614c7b565b602002602001018181525050608082608001516001600160801b0316901b82606001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b806000036131b957505050565b604051634b61cc3360e01b81526000906001600160a01b03851690634b61cc33906131f4903090879064010000000090600190600401614ca7565b600060405180830381865afa158015613211573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132399190810190614dcd565b9050816132628260008151811061325257613252614c7b565b602002602001015160001c6141bb565b61326c9190614e01565b60001b8160008151811061328257613282614c7b565b602090810291909101015260405163048620af60e11b81526001600160a01b0385169063090c415e906132c2908690640100000000908690600401615148565b600060405180830381600087803b1580156132dc57600080fd5b505af11580156132f0573d6000803e3d6000fd5b5050505050505050565b613302614317565b6020840151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015613356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337a919061504a565b8896509194509250905082801561338f575081155b156135625761339e848961407e565b93508760c0015181166000036135505760006133bd8960c001516140fc565b89516040808c015160608d0151825160008152602081019093526133eb9392309291908e906044810161516f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918b015160c08c0151925163079b42a160e21b81529193503392631e6d0a849261345a9291869164200000000091909114908b906004016150cb565b6000604051808303816000875af1158015613479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134a19190810190615114565b604051631fb6491d60e11b81529095503390633f6c923a906134c79088906004016144df565b600060405180830381865afa1580156134e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350c9190810190614f44565b955061354860006135436135238c608001516141bb565b61353e6135338b60e001516141bb565b8b6101000151614225565b61423b565b614225565b610100870152505b61355f86866101000151614193565b93505b505050935093915050565b60405168383ab13634b9b432b960b91b60208201526bffffffffffffffffffffffff19606084901b1660298201526001600160e01b031960e083901b16603d8201526000906041015b60405160208183030381529060405280519060200120905092915050565b60408051606081018252600080825260208201819052918101829052604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261366d9190810190614dcd565b905060008160008151811061368457613684614c7b565b602002602001015160001c90506000826001815181106136a6576136a6614c7b565b602002602001015160001c905060008211945084156136de576001600160801b03808316855281166020850152608081901c60408501525b5050509250929050565b604051631528e57f60e31b81526001600160a01b038085166004830152831660248201526000604482015263ffffffff8216606482015273__SlotsBitmapLibrary____________________9063a9472bf89060840160006040518083038186803b15801561375657600080fd5b505af415801561376a573d6000803e3d6000fd5b50505050505050565b600061379d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137f35760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016103e8565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190614bf8565b61385d61118a565b146138b65760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016103e8565b6001600160a01b038116300361390e5760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016103e8565b613936817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc61395f61118a565b604080519182526001600160a01b03841660208301520160405180910390a150565b6040805160608101825260008082526020820181905291810182905260006139a9858561356d565b92506139b586846135d4565b92509050806139d65760405162461bcd60e51b81526004016103e890614c30565b50935093915050565b866001600160a01b031663cf97256d8785602001516001600160801b0316866000015186613a0d9190614a3d565b6001600160801b0316613a1f90614aea565b613a299190614a65565b6040518363ffffffff1660e01b8152600401613a46929190614b06565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050613aae878785604001516001600160801b0316866000015186613a9b9190614a3d565b6001600160801b031661086d9190614a65565b82516001600160801b03831684526001600160a01b03881663a1b2bf8b86613ad587613067565b6040518363ffffffff1660e01b8152600401613af29291906149f9565b600060405180830381600087803b158015613b0c57600080fd5b505af1158015613b20573d6000803e3d6000fd5b505050508563ffffffff16876001600160a01b0316896001600160a01b03167f81e37f3d9f16cbf29a62d6a1c21d79b23ef29b54124ec44af43a50fffb9304f3848789604001518a6020015189604051613b7e9594939291906151d5565b60405180910390a46040516379359f6f60e01b81526001600160a01b0388811660048301528916906379359f6f90602401602060405180830381865afa158015613bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf09190614e9d565b156132f05760405162461bcd60e51b81526020600482015260126024820152714944413a20455f4c4f575f42414c414e434560701b60448201526064016103e8565b60608073__SlotsBitmapLibrary____________________6306967a8c85856000600160801b6040518563ffffffff1660e01b8152600401613c779493929190614ca7565b600060405180830381865af4158015613c94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cbc9190810190615211565b909250905060005b8151811015613d1d57613cf084838381518110613ce357613ce3614c7b565b602002602001015161403d565b828281518110613d0257613d02614c7b565b6020908102919091010152613d16816152d5565b9050613cc4565b509250929050565b6000613d2f6142e9565b604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613d84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dac9190810190614dcd565b9050600081600081518110613dc357613dc3614c7b565b602002602001015160001c9050600082600181518110613de557613de5614c7b565b602002602001015160001c905060008211945084156136de57606082811c60208087019190915283901c63ffffffff9081166040870152831685526001600160801b03821690850152608081811c908501525050509250929050565b600080836001600160a01b0316634b61cc33308564010000000060016040518563ffffffff1660e01b8152600401613e7c9493929190614ca7565b600060405180830381865afa158015613e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec19190810190614dcd565b905080600081518110613ed657613ed6614c7b565b602002602001015160001c91505092915050565b604051630a32470160e41b81526001600160a01b03808516600483015283166024820152600060448201819052600160801b6064830152608482018390529073__SlotsBitmapLibrary____________________9063a32470109060a401602060405180830381865af4158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8991906152ee565b949350505050565b604051636c2d9f2f60e01b8152306004820152602481018290526002604482015260009081906001600160a01b03851690636c2d9f2f90606401600060405180830381865afa158015613fe8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140109190810190614dcd565b905060008160008151811061402757614027614c7b565b6020908102919091010151151595945050505050565b604080516b39bab139b1b934b83a34b7b760a11b6020820152606084811b6bffffffffffffffffffffffff1916602c830152918101839052600091016135b6565b6020810151608082015160a08301518351604051630768fabb60e41b8152606094339463768fabb0946140b5948a9460040161530b565b6000604051808303816000875af11580156140d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190615114565b6000640100000000820361411857506330d9c91560e01b919050565b64040000000082036141325750630221347d60e61b919050565b641000000000820361414c5750635f9e7d7760e01b919050565b6402000000008203614166575063d86ed3e560e01b919050565b6408000000008203614180575063230dbd2960e01b919050565b506353c11f9960e01b919050565b919050565b604051634c4d861f60e11b8152606090339063989b0c3e906140b59086908690600401615350565b60006001600160ff1b038211156130635760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016103e8565b60008183136142345781612cfc565b5090919050565b600081831361424a5782612cfc565b50919050565b6040805160c0810182526000808252602082018190529181019190915260608101614294604080516060810182526000808252602082018190529181019190915290565b81526020016142a16142e9565b8152602001606081525090565b6040805160e0810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461115857600080fd5b63ffffffff8116811461115857600080fd5b80356001600160801b038116811461418e57600080fd5b60008083601f8401126143c257600080fd5b5081356001600160401b038111156143d957600080fd5b6020830191508360208285010111156143f157600080fd5b9250929050565b60008060008060008060a0878903121561441157600080fd5b863561441c81614372565b9550602087013561442c81614387565b9450604087013561443c81614372565b935061444a60608801614399565b925060808701356001600160401b0381111561446557600080fd5b61447189828a016143b0565b979a9699509497509295939492505050565b60005b8381101561449e578181015183820152602001614486565b838111156144ad576000848401525b50505050565b600081518084526144cb816020860160208601614483565b601f01601f19169290920160200192915050565b602081526000612cfc60208301846144b3565b60008060006060848603121561450757600080fd5b833561451281614372565b9250602084013561452281614372565b9150604084013561453281614387565b809150509250925092565b60008060008060008060a0878903121561455657600080fd5b863561456181614372565b9550602087013561457181614372565b9450604087013561458181614387565b9350606087013561444a81614372565b6000602082840312156145a357600080fd5b8135612cfc81614372565b600080600080608085870312156145c457600080fd5b84356145cf81614372565b935060208501356145df81614372565b925060408501356145ef81614387565b915060608501356145ff81614372565b939692955090935050565b60008060008060006080868803121561462257600080fd5b853561462d81614372565b9450602086013561463d81614372565b9350604086013561464d81614387565b925060608601356001600160401b0381111561466857600080fd5b614674888289016143b0565b969995985093965092949392505050565b60008060008060006080868803121561469d57600080fd5b85356146a881614372565b945060208601356146b881614387565b935061464d60408701614399565b600080600080608085870312156146dc57600080fd5b84356146e781614372565b935060208501356146f781614372565b9250604085013561470781614387565b9396929550929360600135925050565b60008060006060848603121561472c57600080fd5b833561473781614372565b9250602084013561474781614372565b929592945050506040919091013590565b6000806040838503121561476b57600080fd5b823561477681614372565b9150602083013561478681614372565b809150509250929050565b600081518084526020808501945080840160005b838110156147ca5781516001600160801b0316875295820195908201906001016147a5565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156148175781516001600160a01b0316845292840192908401906001016147f2565b5050508381038285015285518082528683019183019060005b8181101561485257835163ffffffff1683529284019291840191600101614830565b505084810360408601526148668187614791565b98975050505050505050565b60008060008060006080868803121561488a57600080fd5b853561489581614372565b945060208601356148a581614387565b93506040860135925060608601356001600160401b0381111561466857600080fd5b600080604083850312156148da57600080fd5b82356148e581614372565b946020939093013593505050565b6000806000806060858703121561490957600080fd5b843561491481614372565b9350602085013561492481614387565b925060408501356001600160401b0381111561493f57600080fd5b61494b878288016143b0565b95989497509550505050565b6020808252601390820152724944413a20455f4e4f5f5a45524f5f5355425360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156149ad576149ad614984565b500190565b6000828210156149c4576149c4614984565b500390565b600081518084526020808501945080840160005b838110156147ca578151875295820195908201906001016149dd565b828152604060208201526000613f8960408301846149c9565b60006001600160801b03808316818516808303821115614a3457614a34614984565b01949350505050565b60006001600160801b0383811690831681811015614a5d57614a5d614984565b039392505050565b60006001600160ff1b0381841382841380821686840486111615614a8b57614a8b614984565b600160ff1b6000871282811687830589121615614aaa57614aaa614984565b60008712925087820587128484161615614ac657614ac6614984565b87850587128184161615614adc57614adc614984565b505050929093029392505050565b6000600160ff1b8201614aff57614aff614984565b5060000390565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526001600160801b0383166020820152606060408201819052600090614b52908301846144b3565b95945050505050565b6001600160a01b038516815263ffffffff841660208201526001600160801b0383166040820152608060608201819052600090614b9a908301846144b3565b9695505050505050565b6001600160a01b0383168152604060208201819052600090613f89908301846144b3565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090614b52908301846144b3565b600060208284031215614c0a57600080fd5b5051919050565b6000816000190483118215151615614c2b57614c2b614984565b500290565b6020808252600f908201526e092888274408abe9c9ebe929c888ab608b1b604082015260600190565b600082614c7657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614d0957614d09614cd0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d3757614d37614cd0565b604052919050565b60006001600160401b03821115614d5857614d58614cd0565b5060051b60200190565b600082601f830112614d7357600080fd5b81516020614d88614d8383614d3f565b614d0f565b82815260059290921b84018101918181019086841115614da757600080fd5b8286015b84811015614dc25780518352918301918301614dab565b509695505050505050565b600060208284031215614ddf57600080fd5b81516001600160401b03811115614df557600080fd5b613f8984828501614d62565b600080821280156001600160ff1b0384900385131615614e2357614e23614984565b600160ff1b8390038412811615614e3c57614e3c614984565b50500190565b600063ffffffff808316818103614e5b57614e5b614984565b6001019392505050565b805161418e81614372565b600060208284031215614e8257600080fd5b8151612cfc81614372565b8051801515811461418e57600080fd5b600060208284031215614eaf57600080fd5b612cfc82614e8d565b805160ff8116811461418e57600080fd5b80516001600160e01b03198116811461418e57600080fd5b600082601f830112614ef257600080fd5b81516001600160401b03811115614f0b57614f0b614cd0565b614f1e601f8201601f1916602001614d0f565b818152846020838601011115614f3357600080fd5b613f89826020830160208701614483565b600060208284031215614f5657600080fd5b81516001600160401b0380821115614f6d57600080fd5b908301906101608286031215614f8257600080fd5b614f8a614ce6565b614f9383614eb8565b8152614fa160208401614eb8565b602082015260408301516040820152614fbc60608401614e65565b6060820152614fcd60808401614ec9565b608082015260a083015182811115614fe457600080fd5b614ff087828601614ee1565b60a08301525060c083015160c082015260e083015160e0820152610100915081830151828201526101209150615027828401614e65565b82820152610140915061503b828401614e65565b91810191909152949350505050565b60008060006060848603121561505f57600080fd5b61506884614e8d565b925061507660208501614e8d565b9150604084015190509250925092565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906150b9908301856144b3565b828103608084015261486681856144b3565b6001600160a01b03851681526080602082018190526000906150ef908301866144b3565b8415156040840152828103606084015261510981856144b3565b979650505050505050565b60006020828403121561512657600080fd5b81516001600160401b0381111561513c57600080fd5b613f8984828501614ee1565b60018060a01b0384168152826020820152606060408201526000614b5260608301846149c9565b6001600160a01b038781168252861660208201526040810185905260c0606082018190526000906151a2908301866144b3565b82810360808401526151b481866144b3565b905082810360a08401526151c881856144b3565b9998505050505050505050565b60006001600160801b0380881683528087166020840152808616604084015280851660608401525060a0608083015261510960a08301846144b3565b6000806040838503121561522457600080fd5b82516001600160401b038082111561523b57600080fd5b818501915085601f83011261524f57600080fd5b8151602061525f614d8383614d3f565b82815260059290921b8401810191818101908984111561527e57600080fd5b948201945b838610156152a557855161529681614387565b82529482019490820190615283565b918801519196509093505050808211156152be57600080fd5b506152cb85828601614d62565b9150509250929050565b6000600182016152e7576152e7614984565b5060010190565b60006020828403121561530057600080fd5b8151612cfc81614387565b60a08152600061531e60a08301886144b3565b6001600160a01b0396871660208401526040830195909552506060810192909252909216608090920191909152919050565b60408152600061536360408301856144b3565b9050826020830152939250505056fea2646970667358221220e49ca08a4ebd6ff840fca023302eace4ca2cc236879573a77c3b33f089cb0fa664736f6c634300080e0033",
|
|
1027
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80637730599e116100ad578063acf4a6c211610071578063acf4a6c21461030d578063b6dacdb814610320578063b96731c214610342578063cd7245c514610355578063d787840a146103ad57600080fd5b80637730599e146102635780637fbc763914610289578063899baaec1461029c5780639b2e48bc146102cc578063acafa1b8146102fa57600080fd5b806346951954116100f457806346951954146101d957806350d75d25146101ee57806352d1902d146101f65780635b5340511461020c5780636041ae961461025057600080fd5b8063232d2b581461012657806323fc23f31461014f5780632e5e74c6146101935780633fd4176a146101a6575b600080fd5b6101396101343660046143f8565b6103c0565b60405161014691906144df565b60405180910390f35b61016261015d3660046144f2565b610ae2565b6040805194151585526001600160801b03938416602086015291831691840191909152166060820152608001610146565b6101396101a136600461453d565b610b4d565b6101c173__SlotsBitmapLibrary____________________81565b6040516001600160a01b039091168152602001610146565b6101ec6101e7366004614591565b6110d7565b005b6101c161115b565b6101fe61118a565b604051908152602001610146565b61021f61021a3660046145ae565b6111ee565b6040516101469493929190931515845291151560208401526001600160801b03166040830152606082015260800190565b61013961025e36600461460a565b6112c4565b7f8aedc3b5d4bf031e11a7e2940f7251c005698405d58e02e1c247fed3b1b3a6746101fe565b610139610297366004614685565b611718565b6102af6102aa3660046146c6565b611828565b604080519283526001600160801b03909116602083015201610146565b6102df6102da366004614717565b6118cc565b60408051938452602084019290925290820152606001610146565b61013961030836600461453d565b611ad7565b61013961031b36600461460a565b611f01565b61033361032e366004614758565b6124e1565b604051610146939291906147d5565b610139610350366004614872565b612736565b6103686103633660046148c7565b612836565b604080516001600160a01b03909616865263ffffffff9094166020860152911515928401929092526001600160801b039091166060830152608082015260a001610146565b6101396103bb3660046148f3565b612958565b60606001600160a01b0385166103f15760405162461bcd60e51b81526004016103e890614957565b60405180910390fd5b6103f9614250565b6104016142ae565b60606000806104468c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b90508060a00151925080606001519150506104658b828b8d6000612d03565b60808901521515602080890191909152606088019190915260408088018390529287528251908101909252600082526104a1918d918c91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050602086015191965050156105055764040000000060c08401526104fb8386612e43565b60a0850152610520565b64010000000060c084015261051a8386612e43565b60a08501525b8360200151801561053d575060808401515163ffffffff90811614155b156106185761058c8460800151608001516001600160801b0316896001600160801b03168660600151602001516001600160801b031661057d919061499a565b61058791906149b2565b612ffa565b6060850180516001600160801b03909216602090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518363ffffffff1660e01b81526004016105e19291906149f9565b600060405180830381600087803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b505050506107ff565b8360200151156106955761065d8460800151608001516001600160801b0316896001600160801b03168660600151604001516001600160801b031661057d919061499a565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916105c490613067565b6040518060a0016040528063ffffffff80168152602001826001600160a01b031681526020018b63ffffffff1681526020018560600151600001516001600160801b03168152602001896001600160801b031681525084608001819052508a6001600160a01b03166312a6a3f885604001516107148760800151613105565b6040518363ffffffff1660e01b81526004016107319291906149f9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50505050878460600151604001516107779190614a12565b6060850180516001600160801b03909216604090920191909152845190516001600160a01b038d169163a1b2bf8b916107af90613067565b6040518363ffffffff1660e01b81526004016107cc9291906149f9565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505b60008460800151608001516001600160801b031685608001516060015186606001516000015161082f9190614a3d565b6001600160801b03166108429190614a65565b905063ffffffff801685608001516000015163ffffffff16036108db576108728c8361086d84614aea565b6131ac565b6001600160a01b038c1663cf97256d8361088b84614aea565b6040518363ffffffff1660e01b81526004016108a8929190614b06565b600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050505b60405163cf97256d60e01b81526001600160a01b038d169063cf97256d90610909908d908590600401614b06565b600060405180830381600087803b15801561092357600080fd5b505af1158015610937573d6000803e3d6000fd5b505050508460200151156109dd5760608086015151608080880180516001600160801b039384169401939093528251918c16910152604086015190516001600160a01b038e169163a1b2bf8b9161098d90613105565b6040518363ffffffff1660e01b81526004016109aa9291906149f9565b600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b505050505b846020015115610a0c5764080000000060c085015260a0850151610a03908590886132fa565b9650610a2c9050565b64020000000060c085015260a0850151610a28908590886132fa565b9650505b8a63ffffffff16826001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398d8d88604051610a7a93929190614b1f565b60405180910390a4896001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c182524977848e8d88604051610acb9493929190614b5b565b60405180910390a350505050509695505050505050565b600080600080610b0b604080516060810182526000808252602082018190529181019190915290565b6000610b17888861356d565b9050610b2389826135d4565b90965091508515610b4257815160208301516040840151919650945092505b505093509350935093565b6060610b57614250565b610b5f6142ae565b600060606000610ba58c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015160a0909101519093509150506001600160a01b038816610bdc5760405162461bcd60e51b81526004016103e890614957565b896001600160a01b0316826001600160a01b031614610c325760405162461bcd60e51b81526020600482015260126024820152711251104e881157d393d517d0531313d5d15160721b60448201526064016103e8565b610c408b8b8a8c6001612d03565b6080890152506060870152604080870182905291865281516020810190925260008252610c70918d918b91612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c087015250909550610cc190508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b0390921691610cf391614a3d565b6001600160801b0316610d069190614a65565b60808601515190915063ffffffff90811614610d5357846080015160800151856060015160200151610d389190614a3d565b60608601516001600160801b03909116602090910152610d86565b846080015160800151856060015160400151610d6f9190614a3d565b60608601516001600160801b039091166040909101525b8b6001600160a01b031663a1b2bf8b8660000151610da78860600151613067565b6040518363ffffffff1660e01b8152600401610dc49291906149f9565b600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b5050505060808501515163ffffffff90811614610e1c57610e1c8c8a8760800151600001516136e8565b60808501515163ffffffff1663fffffffe1901610eaa57610e418c8c61086d84614aea565b6001600160a01b038c1663cf97256d8c610e5a84614aea565b6040518363ffffffff1660e01b8152600401610e77929190614b06565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050505b6040858101519051632704839760e01b81526004810191909152600260248201526001600160a01b038d1690632704839790604401600060405180830381600087803b158015610ef957600080fd5b505af1158015610f0d573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038f16925063cf97256d9150610f3f908c908590600401614b06565b600060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151610f8d908590886132fa565b9050809650508963ffffffff168b6001600160a01b03168d6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d1428c86604051610fdf929190614ba4565b60405180910390a4886001600160a01b03168c6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558d8d8660405161102e93929190614bc8565b60405180910390a38963ffffffff168b6001600160a01b03168d6001600160a01b03167f0115987243fd19d615b5ea62a80372a06a2b37fec378b148ee7a507c5c4c0a398c60008760405161108593929190614b1f565b60405180910390a4886001600160a01b03168c6001600160a01b03167fe0707ac7efb8b59c22189af8d004ed17dc9e4379e71b9066119b62c1825249778d8d600087604051610acb9493929190614b5b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461114f5760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920686f73742063616e2075706461746520636f64650000000000000060448201526064016103e8565b61115881613773565b50565b60006111857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000306001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111859190614bf8565b60008060008060008061121a604080516060810182526000808252602082018190529181019190915290565b6112226142e9565b6112308c8c8b8d6000612d03565b909b509296509094509250905087611259576000806000809750975097509750505050506112b9565b8051608082015163ffffffff9182169091141597509550866112af5780608001516001600160801b0316816060015183600001516112979190614a3d565b6001600160801b03166112aa9190614c11565b6112b2565b60005b9450505050505b945094509450949050565b60606112ce614250565b6112d66142ae565b60006060600061131c8b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a0015191505061133b8a8a848b6001612d03565b6080890181905260608901929092525060408701919091529085525163ffffffff1663fffffffe19016113b05760405162461bcd60e51b815260206004820152601860248201527f4944413a20455f535542535f4e4f545f415050524f564544000000000000000060448201526064016103e8565b6113cf8a8a866040015160405180602001604052806000815250612e15565b925086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505064100000000060c08701525090955061142090508386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b039092169161145291614a3d565b6001600160801b03166114659190614a65565b90508460800151608001518560600151602001516114839190614a3d565b6060860180516001600160801b0390921660209092019190915260808087015101519051604001516114b59190614a12565b6060860180516001600160801b03909216604090920191909152855190516001600160a01b038d169163a1b2bf8b916114ed90613067565b6040518363ffffffff1660e01b815260040161150a9291906149f9565b600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050505061154f8b848760800151600001516136e8565b606080860151516080870180516001600160801b039092169190920152805163ffffffff9052604086015190516001600160a01b038d169163a1b2bf8b9161159690613105565b6040518363ffffffff1660e01b81526004016115b39291906149f9565b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506116139086908590600401614b06565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505064200000000060c0870152505060a0850151611661908590886132fa565b9050809650508863ffffffff168a6001600160a01b03168c6001600160a01b03167fe1f8e9cd8061e5b251769965bda6ca9ef1674bc6541fb9131039fa53f024d14286866040516116b3929190614ba4565b60405180910390a4826001600160a01b03168b6001600160a01b03167f9e02127550b99adc8cc6ee332a36f31338facdbc396cebefce9a047247cd04558c8c8660405161170293929190614bc8565b60405180910390a3505050505095945050505050565b6060600061175c8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806117728a848b613981565b9150915080600001516001600160801b0316886001600160801b031610156117d05760405162461bcd60e51b81526020600482015260116024820152704944413a20455f494e4445585f47524f5760781b60448201526064016103e8565b6117e38a848b85858d8a60a001516139df565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929d9c50505050505050505050505050565b6000806000611837868661356d565b905060008061184689846135d4565b91509150816118675760405162461bcd60e51b81526004016103e890614c30565b60008160400151826020015161187d9190614a12565b6001600160801b031690506000611897610587838a614c59565b83519091506118a7908290614a12565b95506118bc826001600160801b038316614c11565b9650505050505094509492505050565b60008060006060806118de8888613c32565b909250905060005b81518163ffffffff161015611abb5760006118ff6142e9565b600080868563ffffffff168151811061191a5761191a614c7b565b6020026020010151905061194d8d878763ffffffff168151811061194057611940614c7b565b6020026020010151613d25565b90945092508361195f5761195f614c91565b8063ffffffff16836000015163ffffffff161461197e5761197e614c91565b6001600160a01b038d16634b61cc33308e6119a363ffffffff8616600160801b61499a565b60016040518563ffffffff1660e01b81526004016119c49493929190614ca7565b600060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a099190810190614dcd565b600081518110611a1b57611a1b614c7b565b6020026020010151915050611a49604080516060810182526000808252602082018190529181019190915290565b611a538d836135d4565b909450905083611a6557611a65614c91565b82608001516001600160801b031683606001518260000151611a879190614a3d565b6001600160801b0316611a9a9190614a65565b611aa4908b614e01565b99505050505080611ab490614e42565b90506118e6565b50611ac68888613e41565b935060009250505093509350939050565b6060611b198784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b506001600160a01b038416611b405760405162461bcd60e51b81526004016103e890614957565b611b48614250565b611b506142ae565b611b5e8989888a6001612d03565b6080870181905260608701929092525060408501919091529083525163ffffffff90811614611bc65760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b60008260800151608001516001600160801b0316836080015160600151846060015160000151611bf69190614a3d565b6001600160801b0316611c099190614c11565b9050611c2a8a8a856040015160405180602001604052806000815250612e15565b915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505082159150611eba90505764040000000060c0830152611c828285612e43565b60a0840152611c958a8a61086d84614aea565b6001600160a01b038a1663cf97256d8a611cae84614aea565b6040518363ffffffff1660e01b8152600401611ccb929190614b06565b600060405180830381600087803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b50505050606083810151516080850180516001600160801b039092169190920152604084015190516001600160a01b038c169163a1b2bf8b91611d3b90613105565b6040518363ffffffff1660e01b8152600401611d589291906149f9565b600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038d16925063cf97256d9150611db8908a908590600401614b06565b600060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050508763ffffffff16896001600160a01b03168b6001600160a01b03167f467eccd248ef31c8bcef16d94856855799a8783aeef10f3759e43614059a6bb18a85604051611e36929190614b06565b60405180910390a4604080516001600160a01b038b8116825263ffffffff8b166020830152918101839052818916918c16907f48a3d91d4a07e4982b081260e24f922bd33bb965882772d6de19c922c3eabdea9060600160405180910390a364080000000060c083015260a0830151611eb1908390866132fa565b9450611ef49050565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611f0b614250565b611f136142ae565b600060606000611f598b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b9050806060015192508060a00151915050611f788a8a848b6000612d03565b6080890152158015602089015260608801919091526040870191909152908552611fee5760808401515163ffffffff90811614611fee5760405162461bcd60e51b81526020600482015260146024820152731251104e881157d4d55094d7d054141493d5915160621b60448201526064016103e8565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040808a0151815160208101909252918152949950612047948f94508e9350909150612e15565b925083602001516121705764010000000060c08401526120678386612e43565b60a08086019190915260408051918201815260008083526001600160a01b038c16602084015263ffffffff8b1691830191909152606080870151516001600160801b03169083015260808083019190915285015283516120ca908b908490613eea565b60808501805163ffffffff909216909152604085015190516001600160a01b038c16916312a6a3f8916120fc90613105565b6040518363ffffffff1660e01b81526004016121199291906149f9565b600060405180830381600087803b15801561213357600080fd5b505af1158015612147573d6000803e3d6000fd5b505064020000000060c0860152505060a0840151612167908490876132fa565b95506124319050565b64040000000060c08401526121858386612e43565b60a08501526080808501519081015160609182015191860151516000926001600160801b03909216916121b791614a3d565b6001600160801b03166121ca9190614a65565b905084608001516080015185606001516020018181516121ea9190614a12565b6001600160801b0316905250608080860151015160608601516040018051612213908390614a3d565b6001600160801b0316905250845160608601516001600160a01b038d169163a1b2bf8b9161224090613067565b6040518363ffffffff1660e01b815260040161225d9291906149f9565b600060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b5050505061229e8b8b8361086d90614aea565b6001600160a01b038b1663cf97256d8b6122b784614aea565b6040518363ffffffff1660e01b81526004016122d4929190614b06565b600060405180830381600087803b1580156122ee57600080fd5b505af1158015612302573d6000803e3d6000fd5b505060405163cf97256d60e01b81526001600160a01b038e16925063cf97256d91506123349086908590600401614b06565b600060405180830381600087803b15801561234e57600080fd5b505af1158015612362573d6000803e3d6000fd5b5050506060808701515160808801516001600160801b0390911691015250845161238f908c908590613eea565b60808601805163ffffffff909216909152604086015190516001600160a01b038d169163a1b2bf8b916123c190613105565b6040518363ffffffff1660e01b81526004016123de9291906149f9565b600060405180830381600087803b1580156123f857600080fd5b505af115801561240c573d6000803e3d6000fd5b505064080000000060c0870152505060a085015161242c908590886132fa565b965050505b8763ffffffff16896001600160a01b03168b6001600160a01b03167f492d2641617cfaf24ac7328f85bc5bdf5113537d78dc7671afa4f49a73f053c2858560405161247d929190614ba4565b60405180910390a4816001600160a01b03168a6001600160a01b03167fc0b8396b655615cdb85fe462a9a1792480816f909cd46d9517a940b386dfbf6b8b8b856040516124cc93929190614bc8565b60405180910390a35050505095945050505050565b60608060608060606124f38787613c32565b909250905060006125026142e9565b82516001600160401b0381111561251b5761251b614cd0565b604051908082528060200260200182016040528015612544578160200160208202803683370190505b50965082516001600160401b0381111561256057612560614cd0565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b50955082516001600160401b038111156125a5576125a5614cd0565b6040519080825280602002602001820160405280156125ce578160200160208202803683370190505b50945060005b83518163ffffffff16101561272a576000858263ffffffff16815181106125fd576125fd614c7b565b602002602001015190506000858363ffffffff168151811061262157612621614c7b565b602002602001015190506126358c82613d25565b90955093508461264757612647614c91565b8163ffffffff16846000015163ffffffff161461266657612666614c91565b83602001518a8463ffffffff168151811061268357612683614c7b565b60200260200101906001600160a01b031690816001600160a01b0316815250508360400151898463ffffffff16815181106126c0576126c0614c7b565b602002602001019063ffffffff16908163ffffffff16815250508360800151888463ffffffff16815181106126f7576126f7614c7b565b60200260200101906001600160801b031690816001600160801b03168152505050508061272390614e42565b90506125d4565b50505050509250925092565b6060600061277a8785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b60608101519091506000806127908a848b613981565b915091506000816040015182602001516127aa9190614a12565b6001600160801b0316905080156127f05760006127ca610587838c614c59565b90506127ee8c868d87878689600001516127e49190614a12565b8c60a001516139df565b505b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b6000806000806000806000612864604080516060810182526000808252602082018190529181019190915290565b61286c6142e9565b6128768b8b613d25565b9094509050836128b95760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b80602001519850806040015197506128d1898961356d565b92506128dd8b846135d4565b9094509150836128ef576128ef614c91565b8051608082015163ffffffff9182169091141597509550866129455780608001516001600160801b03168160600151836000015161292d9190614a3d565b6001600160801b03166129409190614c11565b612948565b60005b9450505050509295509295909350565b6060600061299c8685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b3892505050565b606081015190915060006129b0828861356d565b90506129bc8882613f91565b156129ff5760405162461bcd60e51b81526020600482015260136024820152724944413a20455f494e4445585f45584953545360681b60448201526064016103e8565b876001600160a01b03166312a6a3f882612a50604051806060016040528060006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815250613067565b6040518363ffffffff1660e01b8152600401612a6d9291906149f9565b600060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050508663ffffffff16826001600160a01b0316896001600160a01b03167f01ab8663165edfb7390d9e5f75d960a66dacf4f01fa9787e3a731c870d0da9218660a00151604051612aed91906144df565b60405180910390a485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929b9a5050505050505050505050565b612b40614317565b336001600160a01b0316836001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bac9190614e70565b6001600160a01b031614612bf65760405162461bcd60e51b81526020600482015260116024820152701d5b985d5d1a1bdc9a5e9959081a1bdcdd607a1b60448201526064016103e8565b604051632fd0a1cd60e21b8152339063bf42873490612c199085906004016144df565b602060405180830381865afa158015612c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5a9190614e9d565b612c945760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840c6e8f60ab1b60448201526064016103e8565b604051631fb6491d60e11b81523390633f6c923a90612cb79085906004016144df565b600060405180830381865afa158015612cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190614f44565b9392505050565b6040805160608101825260008082526020820181905291810182905281906000612d2b6142e9565b6000612d378a8961356d565b9550612d43898761403d565b9450612d4f8b876135d4565b9450905080612d705760405162461bcd60e51b81526004016103e890614c30565b612d7a8b86613d25565b90935091508615612e075782612dc35760405162461bcd60e51b815260206004820152600e60248201526d4944413a20455f4e4f5f5355425360901b60448201526064016103e8565b896001600160a01b031682602001516001600160a01b031614612de857612de8614c91565b8763ffffffff16826040015163ffffffff1614612e0757612e07614c91565b509550955095509550959050565b612e1d6142ae565b6001600160a01b0394851681529290931660208301526040820152606081019190915290565b6020820151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061504a565b91945092509050828015612ecd575081155b15612ff1576000612ede868861407e565b90508660c001518216600003612fe3576000612efd8860c001516140fc565b88516040808b015160608c015182516000815260208101909352612f2993923092919060448101615086565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918a015160c08b01519251633a020f0160e11b815291935033926374041e0292612f9892918691641000000000919091149088906004016150cb565b6000604051808303816000875af1158015612fb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fdf9190810190615114565b9550505b612fee866000614193565b50505b50505092915050565b60006001600160801b038211156130635760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016103e8565b5090565b604080516002808252606080830184529260208301908036833701905050905081600001516001600160801b0316600160801b1760001b816000815181106130b1576130b1614c7b565b602002602001018181525050608082604001516001600160801b0316901b82602001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b602002602001018181525050919050565b6040805160028082526060808301845292602083019080368337019050509050816000015163ffffffff166020836040015163ffffffff16901b606084602001516001600160a01b0316901b171760001b8160008151811061316957613169614c7b565b602002602001018181525050608082608001516001600160801b0316901b82606001516001600160801b03161760001b816001815181106130f4576130f4614c7b565b806000036131b957505050565b604051634b61cc3360e01b81526000906001600160a01b03851690634b61cc33906131f4903090879064010000000090600190600401614ca7565b600060405180830381865afa158015613211573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132399190810190614dcd565b9050816132628260008151811061325257613252614c7b565b602002602001015160001c6141bb565b61326c9190614e01565b60001b8160008151811061328257613282614c7b565b602090810291909101015260405163048620af60e11b81526001600160a01b0385169063090c415e906132c2908690640100000000908690600401615148565b600060405180830381600087803b1580156132dc57600080fd5b505af11580156132f0573d6000803e3d6000fd5b5050505050505050565b613302614317565b6020840151604051633e7d48bd60e21b81526001600160a01b03909116600482015260609060009081908190339063f9f522f490602401606060405180830381865afa158015613356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337a919061504a565b8896509194509250905082801561338f575081155b156135625761339e848961407e565b93508760c0015181166000036135505760006133bd8960c001516140fc565b89516040808c015160608d0151825160008152602081019093526133eb9392309291908e906044810161516f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352918b015160c08c0151925163079b42a160e21b81529193503392631e6d0a849261345a9291869164200000000091909114908b906004016150cb565b6000604051808303816000875af1158015613479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134a19190810190615114565b604051631fb6491d60e11b81529095503390633f6c923a906134c79088906004016144df565b600060405180830381865afa1580156134e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350c9190810190614f44565b955061354860006135436135238c608001516141bb565b61353e6135338b60e001516141bb565b8b6101000151614225565b61423b565b614225565b610100870152505b61355f86866101000151614193565b93505b505050935093915050565b60405168383ab13634b9b432b960b91b60208201526bffffffffffffffffffffffff19606084901b1660298201526001600160e01b031960e083901b16603d8201526000906041015b60405160208183030381529060405280519060200120905092915050565b60408051606081018252600080825260208201819052918101829052604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261366d9190810190614dcd565b905060008160008151811061368457613684614c7b565b602002602001015160001c90506000826001815181106136a6576136a6614c7b565b602002602001015160001c905060008211945084156136de576001600160801b03808316855281166020850152608081901c60408501525b5050509250929050565b604051631528e57f60e31b81526001600160a01b038085166004830152831660248201526000604482015263ffffffff8216606482015273__SlotsBitmapLibrary____________________9063a9472bf89060840160006040518083038186803b15801561375657600080fd5b505af415801561376a573d6000803e3d6000fd5b50505050505050565b600061379d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137f35760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016103e8565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190614bf8565b61385d61118a565b146138b65760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016103e8565b6001600160a01b038116300361390e5760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016103e8565b613936817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc61395f61118a565b604080519182526001600160a01b03841660208301520160405180910390a150565b6040805160608101825260008082526020820181905291810182905260006139a9858561356d565b92506139b586846135d4565b92509050806139d65760405162461bcd60e51b81526004016103e890614c30565b50935093915050565b866001600160a01b031663cf97256d8785602001516001600160801b0316866000015186613a0d9190614a3d565b6001600160801b0316613a1f90614aea565b613a299190614a65565b6040518363ffffffff1660e01b8152600401613a46929190614b06565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050613aae878785604001516001600160801b0316866000015186613a9b9190614a3d565b6001600160801b031661086d9190614a65565b82516001600160801b03831684526001600160a01b03881663a1b2bf8b86613ad587613067565b6040518363ffffffff1660e01b8152600401613af29291906149f9565b600060405180830381600087803b158015613b0c57600080fd5b505af1158015613b20573d6000803e3d6000fd5b505050508563ffffffff16876001600160a01b0316896001600160a01b03167f81e37f3d9f16cbf29a62d6a1c21d79b23ef29b54124ec44af43a50fffb9304f3848789604001518a6020015189604051613b7e9594939291906151d5565b60405180910390a46040516379359f6f60e01b81526001600160a01b0388811660048301528916906379359f6f90602401602060405180830381865afa158015613bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf09190614e9d565b156132f05760405162461bcd60e51b81526020600482015260126024820152714944413a20455f4c4f575f42414c414e434560701b60448201526064016103e8565b60608073__SlotsBitmapLibrary____________________6306967a8c85856000600160801b6040518563ffffffff1660e01b8152600401613c779493929190614ca7565b600060405180830381865af4158015613c94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cbc9190810190615211565b909250905060005b8151811015613d1d57613cf084838381518110613ce357613ce3614c7b565b602002602001015161403d565b828281518110613d0257613d02614c7b565b6020908102919091010152613d16816152d5565b9050613cc4565b509250929050565b6000613d2f6142e9565b604051636c2d9f2f60e01b815230600482015260248101849052600260448201526000906001600160a01b03861690636c2d9f2f90606401600060405180830381865afa158015613d84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dac9190810190614dcd565b9050600081600081518110613dc357613dc3614c7b565b602002602001015160001c9050600082600181518110613de557613de5614c7b565b602002602001015160001c905060008211945084156136de57606082811c60208087019190915283901c63ffffffff9081166040870152831685526001600160801b03821690850152608081811c908501525050509250929050565b600080836001600160a01b0316634b61cc33308564010000000060016040518563ffffffff1660e01b8152600401613e7c9493929190614ca7565b600060405180830381865afa158015613e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec19190810190614dcd565b905080600081518110613ed657613ed6614c7b565b602002602001015160001c91505092915050565b604051630a32470160e41b81526001600160a01b03808516600483015283166024820152600060448201819052600160801b6064830152608482018390529073__SlotsBitmapLibrary____________________9063a32470109060a401602060405180830381865af4158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8991906152ee565b949350505050565b604051636c2d9f2f60e01b8152306004820152602481018290526002604482015260009081906001600160a01b03851690636c2d9f2f90606401600060405180830381865afa158015613fe8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140109190810190614dcd565b905060008160008151811061402757614027614c7b565b6020908102919091010151151595945050505050565b604080516b39bab139b1b934b83a34b7b760a11b6020820152606084811b6bffffffffffffffffffffffff1916602c830152918101839052600091016135b6565b6020810151608082015160a08301518351604051630768fabb60e41b8152606094339463768fabb0946140b5948a9460040161530b565b6000604051808303816000875af11580156140d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cfc9190810190615114565b6000640100000000820361411857506330d9c91560e01b919050565b64040000000082036141325750630221347d60e61b919050565b641000000000820361414c5750635f9e7d7760e01b919050565b6402000000008203614166575063d86ed3e560e01b919050565b6408000000008203614180575063230dbd2960e01b919050565b506353c11f9960e01b919050565b919050565b604051634c4d861f60e11b8152606090339063989b0c3e906140b59086908690600401615350565b60006001600160ff1b038211156130635760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016103e8565b60008183136142345781612cfc565b5090919050565b600081831361424a5782612cfc565b50919050565b6040805160c0810182526000808252602082018190529181019190915260608101614294604080516060810182526000808252602082018190529181019190915290565b81526020016142a16142e9565b8152602001606081525090565b6040805160e0810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461115857600080fd5b63ffffffff8116811461115857600080fd5b80356001600160801b038116811461418e57600080fd5b60008083601f8401126143c257600080fd5b5081356001600160401b038111156143d957600080fd5b6020830191508360208285010111156143f157600080fd5b9250929050565b60008060008060008060a0878903121561441157600080fd5b863561441c81614372565b9550602087013561442c81614387565b9450604087013561443c81614372565b935061444a60608801614399565b925060808701356001600160401b0381111561446557600080fd5b61447189828a016143b0565b979a9699509497509295939492505050565b60005b8381101561449e578181015183820152602001614486565b838111156144ad576000848401525b50505050565b600081518084526144cb816020860160208601614483565b601f01601f19169290920160200192915050565b602081526000612cfc60208301846144b3565b60008060006060848603121561450757600080fd5b833561451281614372565b9250602084013561452281614372565b9150604084013561453281614387565b809150509250925092565b60008060008060008060a0878903121561455657600080fd5b863561456181614372565b9550602087013561457181614372565b9450604087013561458181614387565b9350606087013561444a81614372565b6000602082840312156145a357600080fd5b8135612cfc81614372565b600080600080608085870312156145c457600080fd5b84356145cf81614372565b935060208501356145df81614372565b925060408501356145ef81614387565b915060608501356145ff81614372565b939692955090935050565b60008060008060006080868803121561462257600080fd5b853561462d81614372565b9450602086013561463d81614372565b9350604086013561464d81614387565b925060608601356001600160401b0381111561466857600080fd5b614674888289016143b0565b969995985093965092949392505050565b60008060008060006080868803121561469d57600080fd5b85356146a881614372565b945060208601356146b881614387565b935061464d60408701614399565b600080600080608085870312156146dc57600080fd5b84356146e781614372565b935060208501356146f781614372565b9250604085013561470781614387565b9396929550929360600135925050565b60008060006060848603121561472c57600080fd5b833561473781614372565b9250602084013561474781614372565b929592945050506040919091013590565b6000806040838503121561476b57600080fd5b823561477681614372565b9150602083013561478681614372565b809150509250929050565b600081518084526020808501945080840160005b838110156147ca5781516001600160801b0316875295820195908201906001016147a5565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156148175781516001600160a01b0316845292840192908401906001016147f2565b5050508381038285015285518082528683019183019060005b8181101561485257835163ffffffff1683529284019291840191600101614830565b505084810360408601526148668187614791565b98975050505050505050565b60008060008060006080868803121561488a57600080fd5b853561489581614372565b945060208601356148a581614387565b93506040860135925060608601356001600160401b0381111561466857600080fd5b600080604083850312156148da57600080fd5b82356148e581614372565b946020939093013593505050565b6000806000806060858703121561490957600080fd5b843561491481614372565b9350602085013561492481614387565b925060408501356001600160401b0381111561493f57600080fd5b61494b878288016143b0565b95989497509550505050565b6020808252601390820152724944413a20455f4e4f5f5a45524f5f5355425360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156149ad576149ad614984565b500190565b6000828210156149c4576149c4614984565b500390565b600081518084526020808501945080840160005b838110156147ca578151875295820195908201906001016149dd565b828152604060208201526000613f8960408301846149c9565b60006001600160801b03808316818516808303821115614a3457614a34614984565b01949350505050565b60006001600160801b0383811690831681811015614a5d57614a5d614984565b039392505050565b60006001600160ff1b0381841382841380821686840486111615614a8b57614a8b614984565b600160ff1b6000871282811687830589121615614aaa57614aaa614984565b60008712925087820587128484161615614ac657614ac6614984565b87850587128184161615614adc57614adc614984565b505050929093029392505050565b6000600160ff1b8201614aff57614aff614984565b5060000390565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526001600160801b0383166020820152606060408201819052600090614b52908301846144b3565b95945050505050565b6001600160a01b038516815263ffffffff841660208201526001600160801b0383166040820152608060608201819052600090614b9a908301846144b3565b9695505050505050565b6001600160a01b0383168152604060208201819052600090613f89908301846144b3565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090614b52908301846144b3565b600060208284031215614c0a57600080fd5b5051919050565b6000816000190483118215151615614c2b57614c2b614984565b500290565b6020808252600f908201526e092888274408abe9c9ebe929c888ab608b1b604082015260600190565b600082614c7657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614d0957614d09614cd0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d3757614d37614cd0565b604052919050565b60006001600160401b03821115614d5857614d58614cd0565b5060051b60200190565b600082601f830112614d7357600080fd5b81516020614d88614d8383614d3f565b614d0f565b82815260059290921b84018101918181019086841115614da757600080fd5b8286015b84811015614dc25780518352918301918301614dab565b509695505050505050565b600060208284031215614ddf57600080fd5b81516001600160401b03811115614df557600080fd5b613f8984828501614d62565b600080821280156001600160ff1b0384900385131615614e2357614e23614984565b600160ff1b8390038412811615614e3c57614e3c614984565b50500190565b600063ffffffff808316818103614e5b57614e5b614984565b6001019392505050565b805161418e81614372565b600060208284031215614e8257600080fd5b8151612cfc81614372565b8051801515811461418e57600080fd5b600060208284031215614eaf57600080fd5b612cfc82614e8d565b805160ff8116811461418e57600080fd5b80516001600160e01b03198116811461418e57600080fd5b600082601f830112614ef257600080fd5b81516001600160401b03811115614f0b57614f0b614cd0565b614f1e601f8201601f1916602001614d0f565b818152846020838601011115614f3357600080fd5b613f89826020830160208701614483565b600060208284031215614f5657600080fd5b81516001600160401b0380821115614f6d57600080fd5b908301906101608286031215614f8257600080fd5b614f8a614ce6565b614f9383614eb8565b8152614fa160208401614eb8565b602082015260408301516040820152614fbc60608401614e65565b6060820152614fcd60808401614ec9565b608082015260a083015182811115614fe457600080fd5b614ff087828601614ee1565b60a08301525060c083015160c082015260e083015160e0820152610100915081830151828201526101209150615027828401614e65565b82820152610140915061503b828401614e65565b91810191909152949350505050565b60008060006060848603121561505f57600080fd5b61506884614e8d565b925061507660208501614e8d565b9150604084015190509250925092565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906150b9908301856144b3565b828103608084015261486681856144b3565b6001600160a01b03851681526080602082018190526000906150ef908301866144b3565b8415156040840152828103606084015261510981856144b3565b979650505050505050565b60006020828403121561512657600080fd5b81516001600160401b0381111561513c57600080fd5b613f8984828501614ee1565b60018060a01b0384168152826020820152606060408201526000614b5260608301846149c9565b6001600160a01b038781168252861660208201526040810185905260c0606082018190526000906151a2908301866144b3565b82810360808401526151b481866144b3565b905082810360a08401526151c881856144b3565b9998505050505050505050565b60006001600160801b0380881683528087166020840152808616604084015280851660608401525060a0608083015261510960a08301846144b3565b6000806040838503121561522457600080fd5b82516001600160401b038082111561523b57600080fd5b818501915085601f83011261524f57600080fd5b8151602061525f614d8383614d3f565b82815260059290921b8401810191818101908984111561527e57600080fd5b948201945b838610156152a557855161529681614387565b82529482019490820190615283565b918801519196509093505050808211156152be57600080fd5b506152cb85828601614d62565b9150509250929050565b6000600182016152e7576152e7614984565b5060010190565b60006020828403121561530057600080fd5b8151612cfc81614387565b60a08152600061531e60a08301886144b3565b6001600160a01b0396871660208401526040830195909552506060810192909252909216608090920191909152919050565b60408152600061536360408301856144b3565b9050826020830152939250505056fea2646970667358221220e49ca08a4ebd6ff840fca023302eace4ca2cc236879573a77c3b33f089cb0fa664736f6c634300080e0033",
|
|
1028
1028
|
"immutableReferences": {
|
|
1029
1029
|
"4332": [
|
|
1030
1030
|
{
|
|
@@ -31239,8 +31239,8 @@
|
|
|
31239
31239
|
}
|
|
31240
31240
|
],
|
|
31241
31241
|
"sourceMap": "839:38141:33:-:0;;;2264:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;456:12:30;;;839:38141:33;;14:311:105;105:6;158:2;146:9;137:7;133:23;129:32;126:52;;;174:1;171;164:12;126:52;200:16;;-1:-1:-1;;;;;245:31:105;;235:42;;225:70;;291:1;288;281:12;225:70;314:5;14:311;-1:-1:-1;;;14:311:105:o;:::-;839:38141:33;;;;;;;;;;;;",
|
|
31242
|
-
"deployedSourceMap": "839:38141:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17805:4686;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5736:635;;;;;;:::i;:::-;;:::i;:::-;;;;3397:14:105;;3390:22;3372:41;;-1:-1:-1;;;;;3502:15:105;;;3497:2;3482:18;;3475:43;3554:15;;;3534:18;;;3527:43;;;;3606:15;3601:2;3586:18;;3579:43;3359:3;3344:19;5736:635:33;3147:481:105;25648:3218:33;;;;;;:::i;:::-;;:::i;1428:82::-;;1483:27;1428:82;;;;;-1:-1:-1;;;;;4849:32:105;;;4831:51;;4819:2;4804:18;1428:82:33;4685:203:105;632:191:30;;;;;;:::i;:::-;;:::i;:::-;;400:122:93;;;:::i;481:145:30:-;;;:::i;:::-;;;5309:25:105;;;5297:2;5282:18;481:145:30;5163:177:105;22573:864:33;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;6343:14:105;;6336:22;6318:41;;6402:14;;6395:22;6390:2;6375:18;;6368:50;-1:-1:-1;;;;;6454:47:105;6449:2;6434:18;;6427:75;6533:2;6518:18;;6511:34;6305:3;6290:19;;6099:452;15099:2621:33;;;;;;:::i;:::-;;:::i;1916:168:40:-;1999:78;1916:168;;7252:673:33;;;;;;:::i;:::-;;:::i;6459:715::-;;;;;;:::i;:::-;;:::i;:::-;;;;9092:25:105;;;-1:-1:-1;;;;;9153:47:105;;;9148:2;9133:18;;9126:75;9065:18;6459:715:33;8918:289:105;2968:1763:33;;;;;;:::i;:::-;;:::i;:::-;;;;9935:25:105;;;9991:2;9976:18;;9969:34;;;;10019:18;;;10012:34;9923:2;9908:18;2968:1763:33;9735:317:105;28872:2264:33;;;;;;:::i;:::-;;:::i;11365:3649::-;;;;;;:::i;:::-;;:::i;24545:1018::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;8002:818::-;;;;;;:::i;:::-;;:::i;23523:938::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;13800:32:105;;;13782:51;;13881:10;13869:23;;;13864:2;13849:18;;13842:51;13936:14;;13929:22;13909:18;;;13902:50;;;;-1:-1:-1;;;;;13988:47:105;;;13983:2;13968:18;;13961:75;14067:3;14052:19;;14045:35;13769:3;13754:19;23523:938:33;13531:555:105;4994:667:33;;;;;;:::i;:::-;;:::i;17805:4686::-;18016:19;-1:-1:-1;;;;;18059:24:33;;18051:56;;;;-1:-1:-1;;;18051:56:33;;;;;;;:::i;:::-;;;;;;;;;18117:38;;:::i;:::-;18165:47;;:::i;:::-;18222:21;18253:17;18294:34;18331:49;18369:5;18376:3;;18331:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18331:37:33;;-1:-1:-1;;;18331:49:33:i;:::-;18294:86;;18405:7;:16;;;18394:27;;18447:7;:17;;;18435:29;;18280:195;18627:58;18640:5;18647:9;18658:10;18670:7;18679:5;18627:12;:58::i;:::-;18604:10;;;18485:200;;;18567:23;;;;18485:200;;;;18543:10;;;18485:200;;;;18521:8;;;;18485:200;;;;;;18707:119;;;;;;;;18499:8;18707:119;;;;18758:5;;18777:10;;18707:37;:119::i;:::-;18696:130;;18845:3;;18836:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18895:23:33;;;;18836:12;;-1:-1:-1;;18891:389:33;;;1776:13:42;18934:16:33;;;:68;19030:56;18934:8;19079:6;19030:38;:56::i;:::-;19016:11;;;:70;18891:389;;;1623:13:42;19117:16:33;;;:68;19213:56;19117:8;19262:6;19213:38;:56::i;:::-;19199:11;;;:70;18891:389;19327:4;:23;;;:66;;;;-1:-1:-1;19354:10:33;;;;:16;2192;19354:39;;;;;19327:66;19323:1625;;;19568:159;19684:4;:10;;;:16;;;-1:-1:-1;;;;;19676:25:33;19651:5;-1:-1:-1;;;;;19643:14:33;19594:4;:10;;;:29;;;-1:-1:-1;;;;;19586:38:33;:71;;;;:::i;:::-;:115;;;;:::i;:::-;19568:157;:159::i;:::-;19536:10;;;;;-1:-1:-1;;;;;19536:191:33;;;:29;;;;:191;;;;19767:8;;19794:10;;-1:-1:-1;;;;;19741:25:33;;;;;19777:28;;:16;:28::i;:::-;19741:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19323:1625;;;19827:4;:23;;;19823:1125;;;20052:158;20167:4;:10;;;:16;;;-1:-1:-1;;;;;20159:25:33;20134:5;-1:-1:-1;;;;;20126:14:33;20078:4;:10;;;:28;;;-1:-1:-1;;;;;20070:37:33;:70;;;;:::i;20052:158::-;20021:10;;;;;-1:-1:-1;;;;;20021:189:33;;;:28;;;;:189;;;;20250:8;;20277:10;;-1:-1:-1;;;;;20224:25:33;;;;;20260:28;;:16;:28::i;19823:1125::-;20465:229;;;;;;;;2192:16;20465:229;;;;;;20511:9;-1:-1:-1;;;;;20465:229:33;;;;;20547:7;20465:229;;;;;;20658:4;:10;;;:21;;;-1:-1:-1;;;;;20465:229:33;;;;;20623:5;-1:-1:-1;;;;;20465:229:33;;;;20452:4;:10;;:242;;;;20708:5;-1:-1:-1;;;;;20708:21:33;;20730:4;:8;;;20740:35;20764:4;:10;;;20740:23;:35::i;:::-;20708:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20853:5;20822:4;:10;;;:28;;;:36;;;;:::i;:::-;20791:10;;;;;-1:-1:-1;;;;;20791:67:33;;;:28;;;;:67;;;;20898:8;;20925:10;;-1:-1:-1;;;;;20872:25:33;;;;;20908:28;;:16;:28::i;:::-;20872:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19823:1125;21063:19;21177:4;:10;;;:16;;;-1:-1:-1;;;;;21169:25:33;21124:4;:10;;;:21;;;21100:4;:10;;;:21;;;:45;;;;:::i;:::-;-1:-1:-1;;;;;21092:54:33;21085:110;;;;:::i;:::-;21063:132;;2192:16;21288:39;;:4;:10;;;:16;;;:39;;;21284:185;;21343:56;21367:5;21374:9;21385:13;21386:12;21385:13;:::i;:::-;21343:23;:56::i;:::-;-1:-1:-1;;;;;21413:19:33;;;21433:9;21444:13;21445:12;21444:13;:::i;:::-;21413:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21284:185;21523:45;;-1:-1:-1;;;21523:45:33;;-1:-1:-1;;;;;21523:19:33;;;;;:45;;21543:10;;21555:12;;21523:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21632:4;:23;;;21628:223;;;21695:10;;;;;:21;21671:10;;;;;;-1:-1:-1;;;;;21671:45:33;;;:21;;:45;;;;21730:10;;:24;;;:16;;:24;21794:8;;;;21828:10;;-1:-1:-1;;;;;21768:25:33;;;;;21804:35;;:23;:35::i;:::-;21768:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21628:223;21896:4;:23;;;21892:409;;;1852:13:42;21935:16:33;;;:67;22077:11;;;;22029:68;;21935:8;;22090:6;22029:37;:68::i;:::-;22016:81;-1:-1:-1;21892:409:33;;-1:-1:-1;21892:409:33;;1699:13:42;22128:16:33;;;:67;22270:11;;;;22222:68;;22128:8;;22283:6;22222:37;:68::i;:::-;22209:81;-1:-1:-1;;21892:409:33;22352:7;22316:73;;22341:9;-1:-1:-1;;;;;22316:73:33;22334:5;-1:-1:-1;;;;;22316:73:33;;22361:10;22373:5;22380:8;22316:73;;;;;;;;:::i;:::-;;;;;;;;22436:10;-1:-1:-1;;;;;22404:80:33;22429:5;-1:-1:-1;;;;;22404:80:33;;22448:9;22459:7;22468:5;22475:8;22404:80;;;;;;;;;:::i;:::-;;;;;;;;18041:4450;;;;;17805:4686;;;;;;;;:::o;5736:635::-;5904:10;5928:18;5960:26;6000:25;6041:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:22:33;6073:11;6087:35;6103:9;6114:7;6087:15;:35::i;:::-;6073:49;;6149:25;6163:5;6170:3;6149:13;:25::i;:::-;6132:42;;-1:-1:-1;6132:42:33;-1:-1:-1;6184:181:33;;;;6222:16;;6273:24;;;;6331:23;;;;6222:16;;-1:-1:-1;6273:24:33;-1:-1:-1;6331:23:33;-1:-1:-1;6184:181:33;6031:340;;5736:635;;;;;;;:::o;25648:3218::-;25863:19;25898:38;;:::i;:::-;25946:47;;:::i;:::-;26003:14;26027:21;26072:34;26109:49;26147:5;26154:3;;26109:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26109:37:33;;-1:-1:-1;;;26109:49:33:i;:::-;26181:17;;;;26223:16;;;;;26181:17;;-1:-1:-1;26223:16:33;-1:-1:-1;;;;;;;26267:24:33;;26259:56;;;;-1:-1:-1;;;26259:56:33;;;;;;;:::i;:::-;26522:9;-1:-1:-1;;;;;26512:19:33;:6;-1:-1:-1;;;;;26512:19:33;;26504:50;;;;-1:-1:-1;;;26504:50:33;;18980:2:105;26504:50:33;;;18962:21:105;19019:2;18999:18;;;18992:30;-1:-1:-1;;;19038:18:105;;;19031:48;19096:18;;26504:50:33;18778:342:105;26504:50:33;26684:57;26697:5;26704:9;26715:10;26727:7;26736:4;26684:12;:57::i;:::-;26661:10;;;26565:176;-1:-1:-1;26623:10:33;;;26565:176;26601:8;;;;26565:176;;;;;;26763:119;;-1:-1:-1;26763:119:33;;;;;26579:8;26763:119;;;;26814:5;;26833:10;;26763:37;:119::i;:::-;26752:130;;26901:3;;26892:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1932:13:42;26915:16:33;;;:71;-1:-1:-1;26892:12:33;;-1:-1:-1;27010:56:33;;-1:-1:-1;26915:8:33;26892:12;27010:38;:56::i;:::-;26996:11;;;:70;27296:10;;;;;:16;;;;27243:21;;;;;27219:10;;;;:21;27182:19;;-1:-1:-1;;;;;27288:25:33;;;;27219:45;;;:::i;:::-;-1:-1:-1;;;;;27211:54:33;27204:110;;;;:::i;:::-;27378:10;;;;:16;27182:132;;-1:-1:-1;2192:16:33;27378:39;;;;27374:259;;27497:4;:10;;;:16;;;27465:4;:10;;;:29;;;:48;;;;:::i;:::-;27433:10;;;;-1:-1:-1;;;;;27433:80:33;;;:29;;;;:80;27374:259;;;27606:4;:10;;;:16;;;27575:4;:10;;;:28;;;:47;;;;:::i;:::-;27544:10;;;;-1:-1:-1;;;;;27544:78:33;;;:28;;;;:78;27374:259;27642:5;-1:-1:-1;;;;;27642:25:33;;27668:4;:8;;;27678:28;27695:4;:10;;;27678:16;:28::i;:::-;27642:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27778:10:33;;;;:16;2192;27778:39;;;;27774:123;;27833:53;27850:5;27857:10;27869:4;:10;;;:16;;;27833;:53::i;:::-;27970:10;;;;:16;2192;27970:39;-1:-1:-1;;27970:39:33;27966:185;;28025:56;28049:5;28056:9;28067:13;28068:12;28067:13;:::i;28025:56::-;-1:-1:-1;;;;;28095:19:33;;;28115:9;28126:13;28127:12;28126:13;:::i;:::-;28095:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27966:185;28235:8;;;;;28210:37;;-1:-1:-1;;;28210:37:33;;;;;19307:25:105;;;;28245:1:33;19348:18:105;;;19341:34;-1:-1:-1;;;;;28210:24:33;;;;;19280:18:105;;28210:37:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28302:45:33;;-1:-1:-1;;;28302:45:33;;-1:-1:-1;;;;;28302:19:33;;;-1:-1:-1;28302:19:33;;-1:-1:-1;28302:45:33;;28322:10;;28334:12;;28302:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2011:13:42;28358:16:33;;;:70;-1:-1:-1;;28499:11:33;;;;28451:68;;28358:8;;28512:6;28451:37;:68::i;:::-;28438:81;;;;;;28571:7;28535:66;;28560:9;-1:-1:-1;;;;;28535:66:33;28553:5;-1:-1:-1;;;;;28535:66:33;;28580:10;28592:8;28535:66;;;;;;;:::i;:::-;;;;;;;;28643:10;-1:-1:-1;;;;;28616:68:33;28636:5;-1:-1:-1;;;;;28616:68:33;;28655:9;28666:7;28675:8;28616:68;;;;;;;;:::i;:::-;;;;;;;;28735:7;28699:69;;28724:9;-1:-1:-1;;;;;28699:69:33;28717:5;-1:-1:-1;;;;;28699:69:33;;28744:10;28756:1;28759:8;28699:69;;;;;;;;:::i;:::-;;;;;;;;28815:10;-1:-1:-1;;;;;28783:76:33;28808:5;-1:-1:-1;;;;;28783:76:33;;28827:9;28838:7;28847:1;28850:8;28783:76;;;;;;;;;:::i;632:191:30:-;720:10;-1:-1:-1;;;;;734:5:30;720:19;;712:57;;;;-1:-1:-1;;;712:57:30;;21278:2:105;712:57:30;;;21260:21:105;21317:2;21297:18;;;21290:30;21356:27;21336:18;;;21329:55;21401:18;;712:57:30;21076:349:105;712:57:30;786:30;805:10;786:18;:30::i;:::-;632:191;:::o;400:122:93:-;447:19;489:26;751:20:95;745:27;;618:170;489:26:93;482:33;;400:122;:::o;481:145:30:-;552:7;598:4;-1:-1:-1;;;;;582:35:30;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22573:864:33:-;22776:10;22800:13;22827;22854:27;22906:11;22927;22948:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;22948:22:33;22980:29;;:::i;:::-;23124:58;23137:5;23144:9;23155:10;23167:7;23176:5;23124:12;:58::i;:::-;23020:162;;-1:-1:-1;23020:162:33;;-1:-1:-1;23020:162:33;;-1:-1:-1;23020:162:33;-1:-1:-1;23020:162:33;-1:-1:-1;23020:162:33;23193:39;;23213:5;23220;23227:1;23230;23205:27;;;;;;;;;;;;;;23193:39;23253:11;;23305;;;;2192:16;23253:34;;;;;;;;-1:-1:-1;23305:11:33;-1:-1:-1;23253:34:33;23348:82;;23418:5;:11;;;-1:-1:-1;;;;;23410:20:33;23390:5;:16;;;23371:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;23363:44:33;:67;;;;:::i;:::-;23348:82;;;23359:1;23348:82;23326:104;;22896:541;;;;22573:864;;;;;;;;;;:::o;15099:2621::-;15288:19;15323:38;;:::i;:::-;15371:47;;:::i;:::-;15428:18;15456:21;15501:34;15538:49;15576:5;15583:3;;15538:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15538:37:33;;-1:-1:-1;;;15538:49:33:i;:::-;15501:86;;15614:7;:17;;;15601:30;;15656:7;:16;;;15645:27;;15487:196;15812:57;15825:5;15832:9;15843:10;15855:7;15864:4;15812:12;:57::i;:::-;15789:10;;;15693:176;;;15751:10;;;15693:176;;;;-1:-1:-1;15729:8:33;;;15693:176;;;;;;;15954:16;2192;15954:39;-1:-1:-1;;15954:39:33;15946:76;;;;-1:-1:-1;;;15946:76:33;;21994:2:105;15946:76:33;;;21976:21:105;22033:2;22013:18;;;22006:30;22072:26;22052:18;;;22045:54;22116:18;;15946:76:33;21792:348:105;15946:76:33;16044:118;16095:5;16114:9;16137:4;:8;;;16044:118;;;;;;;;;;;;:37;:118::i;:::-;16033:129;;16181:3;;16172:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1932:13:42;16195:16:33;;;:71;-1:-1:-1;16172:12:33;;-1:-1:-1;16290:56:33;;-1:-1:-1;16195:8:33;16172:12;16290:38;:56::i;:::-;16276:11;;;:70;16580:10;;;;;:16;;;;16527:21;;;;;16503:10;;;;:21;16466:19;;-1:-1:-1;;;;;16572:25:33;;;;16503:45;;;:::i;:::-;-1:-1:-1;;;;;16495:54:33;16488:110;;;;:::i;:::-;16466:132;;16673:4;:10;;;:16;;;16641:4;:10;;;:29;;;:48;;;;:::i;:::-;16609:10;;;;;-1:-1:-1;;;;;16609:80:33;;;:29;;;;:80;;;;16761:10;;;;;:16;;16730:10;;-1:-1:-1;16730:28:33;;:47;;16761:16;16730:47;:::i;:::-;16699:10;;;;;-1:-1:-1;;;;;16699:78:33;;;:28;;;;:78;;;;16813:8;;16840:10;;-1:-1:-1;;;;;16787:25:33;;;;;16823:28;;:16;:28::i;:::-;16787:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16919:53;16936:5;16943:10;16955:4;:10;;;:16;;;16919;:53::i;:::-;17045:10;;;;;:21;17021:10;;;;;-1:-1:-1;;;;;17021:45:33;;;:21;;;;:45;17119:10;;2192:16;17119:38;;17193:8;;;;17227:10;;-1:-1:-1;;;;;17167:25:33;;;;;17203:35;;:23;:35::i;:::-;17167:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17331:45:33;;-1:-1:-1;;;17331:45:33;;-1:-1:-1;;;;;17331:19:33;;;-1:-1:-1;17331:19:33;;-1:-1:-1;17331:45:33;;17351:10;;17363:12;;17331:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2011:13:42;17387:16:33;;;:70;-1:-1:-1;;17528:11:33;;;;17480:68;;17387:8;;17541:6;17480:37;:68::i;:::-;17467:81;;;;;;17600:7;17564:66;;17589:9;-1:-1:-1;;;;;17564:66:33;17582:5;-1:-1:-1;;;;;17564:66:33;;17609:10;17621:8;17564:66;;;;;;;:::i;:::-;;;;;;;;17672:10;-1:-1:-1;;;;;17645:68:33;17665:5;-1:-1:-1;;;;;17645:68:33;;17684:9;17695:7;17704:8;17645:68;;;;;;;;:::i;:::-;;;;;;;;15313:2407;;;;;15099:2621;;;;;;;:::o;7252:673::-;7433:19;7468:34;7505:49;7543:5;7550:3;;7505:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7505:37:33;;-1:-1:-1;;;7505:49:33:i;:::-;7584:17;;;;7468:86;;-1:-1:-1;7564:17:33;;7651:41;7666:5;7584:17;7684:7;7651:14;:41::i;:::-;7611:81;;;;7724:5;:16;;;-1:-1:-1;;;;;7710:30:33;:10;-1:-1:-1;;;;;7710:30:33;;;7702:60;;;;-1:-1:-1;;;7702:60:33;;22347:2:105;7702:60:33;;;22329:21:105;22386:2;22366:18;;;22359:30;-1:-1:-1;;;22405:18:105;;;22398:47;22462:18;;7702:60:33;22145:341:105;7702:60:33;7773:81;7786:5;7793:9;7804:7;7813:3;7818:5;7825:10;7837:7;:16;;;7773:12;:81::i;:::-;7915:3;;7906:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7906:12:33;;7252:673;-1:-1:-1;;;;;;;;;;;;;7252:673:33:o;6459:715::-;6663:20;6697:21;6734:11;6748:35;6764:9;6775:7;6748:15;:35::i;:::-;6734:49;;6794:10;6806:22;6832:25;6846:5;6853:3;6832:13;:25::i;:::-;6793:64;;;;6875:5;6867:33;;;;-1:-1:-1;;;6867:33:33;;;;;;;:::i;:::-;6911:18;6967:5;:23;;;6940:5;:24;;;:50;;;;:::i;:::-;-1:-1:-1;;;;;6932:59:33;;-1:-1:-1;7001:18:33;7022:33;7023:19;6932:59;7023:6;:19;:::i;7022:33::-;7081:16;;7001:54;;-1:-1:-1;7081:29:33;;7001:54;;7081:29;:::i;:::-;7065:45;-1:-1:-1;7135:32:33;7157:10;-1:-1:-1;;;;;7135:19:33;;:32;:::i;:::-;7120:47;;6724:450;;;;;6459:715;;;;;;;:::o;2968:1763::-;3145:21;3180:15;3209:19;3341:23;3374:24;3429:36;3450:5;3457:7;3429:20;:36::i;:::-;3408:57;;-1:-1:-1;3408:57:33;-1:-1:-1;3480:8:33;3475:1079;3498:7;:14;3494:1;:18;;;3475:1079;;;3533:10;3557:29;;:::i;:::-;3600:11;3644:12;3659:7;3667:1;3659:10;;;;;;;;;;:::i;:::-;;;;;;;3644:25;;3704:39;3725:5;3732:7;3740:1;3732:10;;;;;;;;;;:::i;:::-;;;;;;;3704:20;:39::i;:::-;3687:56;;-1:-1:-1;3687:56:33;-1:-1:-1;3687:56:33;3761:13;;;;:::i;:::-;3814:5;3799:20;;:5;:11;;;:20;;;3792:28;;;;:::i;:::-;-1:-1:-1;;;;;3896:27:33;;;3953:4;3980:7;4009:48;;;;-1:-1:-1;;;4009:48:33;:::i;:::-;4059:1;3896:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3896:165:33;;;;;;;;;;;;:::i;:::-;4062:1;3896:168;;;;;;;;:::i;:::-;;;;;;;3890:174;;3626:453;4111:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:22:33;4168:25;4182:5;4189:3;4168:13;:25::i;:::-;4151:42;;-1:-1:-1;4151:42:33;-1:-1:-1;4151:42:33;4211:13;;;;:::i;:::-;4498:5;:11;;;-1:-1:-1;;;;;4490:20:33;4462:5;:16;;;4443:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;4435:44:33;4428:83;;;;:::i;:::-;4259:270;;:14;:270;:::i;:::-;4242:287;;4093:451;3519:1035;;;3514:3;;;;:::i;:::-;;;3475:1079;;;;4663:36;4684:5;4691:7;4663:20;:36::i;:::-;4653:46;;4723:1;4709:15;;3243:1488;;2968:1763;;;;;;;:::o;28872:2264::-;29074:19;29109:49;29147:5;29154:3;;29109:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29109:37:33;;-1:-1:-1;;;29109:49:33:i;:::-;-1:-1:-1;;;;;;29176:24:33;;29168:56;;;;-1:-1:-1;;;29168:56:33;;;;;;;:::i;:::-;29235:38;;:::i;:::-;29283:47;;:::i;:::-;29460:57;29473:5;29480:9;29491:10;29503:7;29512:4;29460:12;:57::i;:::-;29437:10;;;29341:176;;;29399:10;;;29341:176;;;;-1:-1:-1;29377:8:33;;;29341:176;;;;;;;29572:16;2192;29572:39;;;;29564:72;;;;-1:-1:-1;;;29564:72:33;;26351:2:105;29564:72:33;;;26333:21:105;26390:2;26370:18;;;26363:30;-1:-1:-1;;;26409:18:105;;;26402:50;26469:18;;29564:72:33;26149:344:105;29564:72:33;29647:27;29754:4;:10;;;:16;;;-1:-1:-1;;;;;29746:25:33;29709:4;:10;;;:21;;;29685:4;:10;;;:21;;;:45;;;;:::i;:::-;-1:-1:-1;;;;;29677:54:33;:94;;;;:::i;:::-;29647:124;;29793:118;29844:5;29863:9;29886:4;:8;;;29793:118;;;;;;;;;;;;:37;:118::i;:::-;29782:129;;29930:3;;29921:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29921:12:33;;-1:-1:-1;;29948:23:33;;;-1:-1:-1;29944:1186:33;;-1:-1:-1;29944:1186:33;1776:13:42;29987:16:33;;;:68;30083:56;29987:8;30132:6;30083:38;:56::i;:::-;30069:11;;;:70;30197:71;30221:5;30228:9;30239:28;30247:19;30239:28;:::i;30197:71::-;-1:-1:-1;;;;;30282:19:33;;;30302:9;30313:28;30321:19;30313:28;:::i;:::-;30282:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;30453:10:33;;;;;:21;30429:10;;;;;-1:-1:-1;;;;;30429:45:33;;;:21;;;;:45;30514:8;;;;30548:10;;-1:-1:-1;;;;;30488:25:33;;;;;30524:35;;:23;:35::i;:::-;30488:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30574:60:33;;-1:-1:-1;;;30574:60:33;;-1:-1:-1;;;;;30574:19:33;;;-1:-1:-1;30574:19:33;;-1:-1:-1;30574:60:33;;30594:10;;30613:19;;30574:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30697:7;30654:84;;30686:9;-1:-1:-1;;;;;30654:84:33;30679:5;-1:-1:-1;;;;;30654:84:33;;30706:10;30718:19;30654:84;;;;;;;:::i;:::-;;;;;;;;30757:91;;;-1:-1:-1;;;;;26995:32:105;;;26977:51;;27076:10;27064:23;;27059:2;27044:18;;27037:51;27104:18;;;27097:34;;;30757:91:33;;;;;;;;;26965:2:105;26950:18;30757:91:33;;;;;;;1852:13:42;30863:16:33;;;:67;31005:11;;;;30957:68;;30863:8;;31018:6;30957:37;:68::i;:::-;30944:81;-1:-1:-1;29944:1186:33;;-1:-1:-1;29944:1186:33;;31116:3;;31107:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31107:12:33;;-1:-1:-1;;;;29944:1186:33;29099:2037;;;28872:2264;;;;;;;;:::o;11365:3649::-;11553:19;11588:38;;:::i;:::-;11636:47;;:::i;:::-;11693:18;11721:21;11766:34;11803:49;11841:5;11848:3;;11803:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11803:37:33;;-1:-1:-1;;;11803:49:33:i;:::-;11766:86;;11879:7;:17;;;11866:30;;11921:7;:16;;;11910:27;;11752:196;12100:58;12113:5;12120:9;12131:10;12143:7;12152:5;12100:12;:58::i;:::-;12077:10;;;11958:200;;;;12040:23;;;11958:200;12016:10;;;11958:200;;;;11994:8;;;11958:200;;;;;;;12169:166;;12260:10;;;;:16;2192;12260:39;;;;12252:72;;;;-1:-1:-1;;;12252:72:33;;26351:2:105;12252:72:33;;;26333:21:105;26390:2;26370:18;;;26363:30;-1:-1:-1;;;26409:18:105;;;26402:50;26469:18;;12252:72:33;26149:344:105;12252:72:33;12354:3;;12345:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12471:8:33;;;;;12378:118;;;;;;;;;;;12345:12;;-1:-1:-1;12378:118:33;;12429:5;;-1:-1:-1;12448:9:33;;-1:-1:-1;12471:8:33;;-1:-1:-1;12378:37:33;:118::i;:::-;12367:129;;12512:4;:23;;;12507:2228;;1623:13:42;12551:16:33;;;:68;12647:56;12551:8;12696:6;12647:38;:56::i;:::-;12633:11;;;;:70;;;;12731:207;;;;;;;;-1:-1:-1;12731:207:33;;;-1:-1:-1;;;;;12731:207:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;12902:10:33;:21;-1:-1:-1;;;;;12731:207:33;;;;;;;;;;;;;12718:10;;:220;13071:8;;13029:51;;13052:5;;13059:10;;13029:22;:51::i;:::-;13010:10;;;;;:70;;;;;;;13116:8;;;;13150:10;;-1:-1:-1;;;;;13094:21:33;;;;;13126:35;;:23;:35::i;:::-;13094:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1699:13:42;13177:16:33;;;:67;-1:-1:-1;;13319:11:33;;;;13271:68;;13177:8;;13332:6;13271:37;:68::i;:::-;13258:81;-1:-1:-1;12507:2228:33;;-1:-1:-1;12507:2228:33;;1776:13:42;13370:16:33;;;:68;13466:56;13370:8;13515:6;13466:38;:56::i;:::-;13452:11;;;:70;13765:10;;;;;:16;;;;13708:21;;;;;13684:10;;;;:21;13650:16;;-1:-1:-1;;;;;13757:25:33;;;;13684:45;;;:::i;:::-;-1:-1:-1;;;;;13676:54:33;13669:114;;;;:::i;:::-;13650:133;;13900:4;:10;;;:16;;;13867:4;:10;;;:29;;:49;;;;;;;:::i;:::-;-1:-1:-1;;;;;13867:49:33;;;-1:-1:-1;13962:10:33;;;;;:16;;13930:10;;;;:28;;:48;;;;13962:16;;13930:48;:::i;:::-;-1:-1:-1;;;;;13930:48:33;;;-1:-1:-1;14018:8:33;;14045:10;;;;-1:-1:-1;;;;;13992:25:33;;;;;14028:28;;:16;:28::i;:::-;13992:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14071:56;14095:5;14102:9;14114:12;14113:13;;;:::i;14071:56::-;-1:-1:-1;;;;;14141:19:33;;;14161:9;14172:13;14173:12;14172:13;:::i;:::-;14141:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14273:45:33;;-1:-1:-1;;;14273:45:33;;-1:-1:-1;;;;;14273:19:33;;;-1:-1:-1;14273:19:33;;-1:-1:-1;14273:45:33;;14293:10;;14305:12;;14273:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14356:10:33;;;;;:21;14332:10;;;;-1:-1:-1;;;;;14332:45:33;;;:21;;:45;-1:-1:-1;14452:8:33;;14410:51;;14433:5;;14440:10;;14410:22;:51::i;:::-;14391:10;;;;;:70;;;;;;;14501:8;;;;14535:10;;-1:-1:-1;;;;;14475:25:33;;;;;14511:35;;:23;:35::i;:::-;14475:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1852:13:42;14562:16:33;;;:67;-1:-1:-1;;14704:11:33;;;;14656:68;;14562:8;;14717:6;14656:37;:68::i;:::-;14643:81;-1:-1:-1;;;12507:2228:33;14893:7;14859:64;;14882:9;-1:-1:-1;;;;;14859:64:33;14875:5;-1:-1:-1;;;;;14859:64:33;;14902:10;14914:8;14859:64;;;;;;;:::i;:::-;;;;;;;;14966:10;-1:-1:-1;;;;;14938:69:33;14959:5;-1:-1:-1;;;;;14938:69:33;;14978:9;14989:7;14998:8;14938:69;;;;;;;;:::i;:::-;;;;;;;;11578:3436;;;;11365:3649;;;;;;;:::o;24545:1018::-;24698:27;24739:24;24777:26;24819:23;24852:24;24907:39;24928:5;24935:10;24907:20;:39::i;:::-;24886:60;;-1:-1:-1;24886:60:33;-1:-1:-1;24956:10:33;24976:29;;:::i;:::-;25042:7;:14;-1:-1:-1;;;;;25028:29:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25028:29:33;;25015:42;;25091:7;:14;-1:-1:-1;;;;;25078:28:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25078:28:33;;25067:39;;25142:7;:14;-1:-1:-1;;;;;25128:29:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25128:29:33;;25116:41;;25172:8;25167:390;25190:7;:14;25186:1;:18;;;25167:390;;;25225:12;25240:7;25248:1;25240:10;;;;;;;;;;:::i;:::-;;;;;;;25225:25;;25264:11;25278:7;25286:1;25278:10;;;;;;;;;;:::i;:::-;;;;;;;25264:24;;25319:32;25340:5;25347:3;25319:20;:32::i;:::-;25302:49;;-1:-1:-1;25302:49:33;-1:-1:-1;25302:49:33;25365:13;;;;:::i;:::-;25414:5;25399:20;;:5;:11;;;:20;;;25392:28;;;;:::i;:::-;25450:5;:15;;;25434:10;25445:1;25434:13;;;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;25434:31:33;;;-1:-1:-1;;;;;25434:31:33;;;;;25493:5;:13;;;25479:8;25488:1;25479:11;;;;;;;;;;:::i;:::-;;;;;;:27;;;;;;;;;;;25535:5;:11;;;25520:9;25530:1;25520:12;;;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;25520:26:33;;;-1:-1:-1;;;;;25520:26:33;;;;;25211:346;;25206:3;;;;:::i;:::-;;;25167:390;;;;24809:754;;;;24545:1018;;;;;:::o;8002:818::-;8178:19;8213:34;8250:49;8288:5;8295:3;;8250:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8250:37:33;;-1:-1:-1;;;8250:49:33:i;:::-;8329:17;;;;8213:86;;-1:-1:-1;8309:17:33;;8396:41;8411:5;8329:17;8429:7;8396:14;:41::i;:::-;8356:81;;;;8447:18;8503:5;:23;;;8476:5;:24;;;:50;;;;:::i;:::-;-1:-1:-1;;;;;8468:59:33;;-1:-1:-1;8542:14:33;;8538:213;;8572:18;8593:33;8594:19;8603:10;8594:6;:19;:::i;8593:33::-;8572:54;;8640:100;8653:5;8660:9;8671:7;8680:3;8685:5;8711:10;8692:5;:16;;;:29;;;;:::i;:::-;8723:7;:16;;;8640:12;:100::i;:::-;8558:193;8538:213;8810:3;;8801:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8801:12:33;;8002:818;-1:-1:-1;;;;;;;;;;;;;;8002:818:33:o;23523:938::-;23674:17;23704:14;23731:13;23757;23783:27;23834:10;23854:11;23875:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;23875:22:33;23907:29;;:::i;:::-;23964:40;23985:5;23992:11;23964:20;:40::i;:::-;23947:57;;-1:-1:-1;23947:57:33;-1:-1:-1;23947:57:33;24014:32;;;;-1:-1:-1;;;24014:32:33;;27344:2:105;24014:32:33;;;27326:21:105;27383:2;27363:18;;;27356:30;-1:-1:-1;;;27402:18:105;;;27395:44;27456:18;;24014:32:33;27142:338:105;24014:32:33;24069:5;:15;;;24057:27;;24104:5;:13;;;24094:23;;24133:35;24149:9;24160:7;24133:15;:35::i;:::-;24127:41;;24195:25;24209:5;24216:3;24195:13;:25::i;:::-;24178:42;;-1:-1:-1;24178:42:33;-1:-1:-1;24178:42:33;24230:13;;;;:::i;:::-;24265:11;;24317;;;;2192:16;24265:34;;;;;;;;-1:-1:-1;24317:11:33;-1:-1:-1;24265:34:33;24360:94;;24442:5;:11;;;-1:-1:-1;;;;;24434:20:33;24414:5;:16;;;24395:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;24387:44:33;:67;;;;:::i;:::-;24360:94;;;24371:1;24360:94;24338:116;;23824:637;;;;23523:938;;;;;;;;:::o;4994:667::-;5147:19;5182:34;5219:49;5257:5;5264:3;;5219:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5219:37:33;;-1:-1:-1;;;5219:49:33:i;:::-;5298:17;;;;5182:86;;-1:-1:-1;5278:17:33;5339:35;5298:17;5366:7;5339:15;:35::i;:::-;5325:49;;5393:25;5407:5;5414:3;5393:13;:25::i;:::-;5392:26;5384:58;;;;-1:-1:-1;;;5384:58:33;;27687:2:105;5384:58:33;;;27669:21:105;27726:2;27706:18;;;27699:30;-1:-1:-1;;;27745:18:105;;;27738:49;27804:18;;5384:58:33;27485:343:105;5384:58:33;5453:5;-1:-1:-1;;;;;5453:21:33;;5475:3;5480:36;5497:18;;;;;;;;5507:1;-1:-1:-1;;;;;5497:18:33;;;;;5510:1;-1:-1:-1;;;;;5497:18:33;;;;;5513:1;-1:-1:-1;;;;;5497:18:33;;;;5480:16;:36::i;:::-;5453:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5564:7;5533:57;;5553:9;-1:-1:-1;;;;;5533:57:33;5546:5;-1:-1:-1;;;;;5533:57:33;;5573:7;:16;;;5533:57;;;;;;:::i;:::-;;;;;;;;5651:3;;5642:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5642:12:33;;4994:667;-1:-1:-1;;;;;;;;;;;4994:667:33:o;1013:347:31:-;1124:26;;:::i;:::-;1193:10;-1:-1:-1;;;;;1174:29:31;:5;-1:-1:-1;;;;;1174:13:31;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1174:29:31;;1166:59;;;;-1:-1:-1;;;1166:59:31;;28470:2:105;1166:59:31;;;28452:21:105;28509:2;28489:18;;;28482:30;-1:-1:-1;;;28528:18:105;;;28521:47;28585:18;;1166:59:31;28268:341:105;1166:59:31;1243:39;;-1:-1:-1;;;1243:39:31;;1255:10;;1243:34;;:39;;1278:3;;1243:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1235:63;;;;-1:-1:-1;;;1235:63:31;;29192:2:105;1235:63:31;;;29174:21:105;29231:2;29211:18;;;29204:30;-1:-1:-1;;;29250:18:105;;;29243:41;29301:18;;1235:63:31;28990:335:105;1235:63:31;1315:38;;-1:-1:-1;;;1315:38:31;;1327:10;;1315:33;;:38;;1349:3;;1315:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1315:38:31;;;;;;;;;;;;:::i;:::-;1308:45;1013:347;-1:-1:-1;;;1013:347:31:o;31142:950:33:-;-1:-1:-1;;;;;;;;31374:11:33;-1:-1:-1;;;;;;;;;;;;;;;31374:11:33;;31460:23;31497:29;;:::i;:::-;31551:16;31583:35;31599:9;31610:7;31583:15;:35::i;:::-;31577:41;;31634:35;31653:10;31665:3;31634:18;:35::i;:::-;31628:41;;31702:25;31716:5;31723:3;31702:13;:25::i;:::-;31679:48;-1:-1:-1;31679:48:33;-1:-1:-1;31679:48:33;31737:39;;;;-1:-1:-1;;;31737:39:33;;;;;;;:::i;:::-;31816:32;31837:5;31844:3;31816:20;:32::i;:::-;31786:62;;-1:-1:-1;31786:62:33;-1:-1:-1;31858:228:33;;;;31913:18;31905:45;;;;-1:-1:-1;;;31905:45:33;;27344:2:105;31905:45:33;;;27326:21:105;27383:2;27363:18;;;27356:30;-1:-1:-1;;;27402:18:105;;;27395:44;27456:18;;31905:45:33;27142:338:105;31905:45:33;32019:9;-1:-1:-1;;;;;32000:28:33;:5;:15;;;-1:-1:-1;;;;;32000:28:33;;31993:36;;;;:::i;:::-;32067:7;32050:24;;:5;:13;;;:24;;;32043:32;;;;:::i;:::-;31541:551;31142:950;;;;;;;;;;;:::o;1806:388:31:-;2001:28;;:::i;:::-;-1:-1:-1;;;;;2045:20:31;;;;;2075:24;;;;:14;;;:24;2109:18;;;:32;2151:20;;;:36;;;;2045:6;1806:388::o;2200:1318::-;2527:14;;;;2478:65;;-1:-1:-1;;;2478:65:31;;-1:-1:-1;;;;;4849:32:105;;;2478:65:31;;;4831:51:105;2334:19:31;;-1:-1:-1;;;;;;2490:10:31;;2478:38;;4804:18:105;;2478:65:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2443:100;;-1:-1:-1;2443:100:31;-1:-1:-1;2443:100:31;-1:-1:-1;2443:100:31;2557:23;;;;;2572:8;2571:9;2557:23;2553:959;;;2596:19;2618:31;2637:3;2642:6;2618:18;:31::i;:::-;2596:53;;2679:6;:14;;;2668:8;:25;2698:1;2667:32;2663:688;;2719:21;2787:36;2808:6;:14;;;2787:20;:36::i;:::-;2845:12;;2935:18;;;;;2975:20;;;;3017:12;;2845;3017;;;;;;;;2743:323;;2845:12;2887:4;;2935:18;2975:20;2743:323;;;;:::i;:::-;;;;-1:-1:-1;;2743:323:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;2743:323:31;-1:-1:-1;;;;;;2743:323:31;;;;;;;;;;3170:14;;;;3237;;;;3093:243;;-1:-1:-1;;;3093:243:31;;2743:323;;-1:-1:-1;3105:10:31;;3093:45;;:243;;3170:14;2743:323;;1932:13:42;3237:70:31;;;;;3329:6;;3093:243;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3093:243:31;;;;;;;;;;;;:::i;:::-;3084:252;;2701:650;2663:688;3476:25;3494:3;3499:1;3476:17;:25::i;:::-;;2582:930;2553:959;2359:1159;;;2200:1318;;;;:::o;1618:192:27:-;1675:7;-1:-1:-1;;;;;1702:26:27;;;1694:78;;;;-1:-1:-1;;;1694:78:27;;33902:2:105;1694:78:27;;;33884:21:105;33941:2;33921:18;;;33914:30;33980:34;33960:18;;;33953:62;-1:-1:-1;;;34031:18:105;;;34024:37;34078:19;;1694:78:27;33700:403:105;1694:78:27;-1:-1:-1;1797:5:27;1618:192::o;33015:435:33:-;33157:16;;;33171:1;33157:16;;;33117:21;33157:16;;;;;33117:21;33157:16;;;;;;;;;;-1:-1:-1;33157:16:33;33150:23;;33274:5;:16;;;-1:-1:-1;;;;;33266:25:33;-1:-1:-1;;;33214:77:33;33193:108;;33183:4;33188:1;33183:7;;;;;;;;:::i;:::-;;;;;;:118;;;;;33429:3;33401:5;:23;;;-1:-1:-1;;;;;33393:32:33;:39;;33351:5;:24;;;-1:-1:-1;;;;;33343:33:33;33342:91;33321:122;;33311:4;33316:1;33311:7;;;;;;;;:::i;:::-;;;;;;:132;;;;;33015:435;;;:::o;35765:479::-;35925:16;;;35939:1;35925:16;;;35881:21;35925:16;;;;;35881:21;35925:16;;;;;;;;;;-1:-1:-1;35925:16:33;35918:23;;36095:5;:11;;;36087:20;;36069:2;36051:5;:13;;;36043:22;;:28;;36021:4;35999:5;:15;;;-1:-1:-1;;;;;35983:33:33;:43;;35982:90;:125;35961:156;;35951:4;35956:1;35951:7;;;;;;;;:::i;:::-;;;;;;:166;;;;;36223:3;36207:5;:11;;;-1:-1:-1;;;;;36199:20:33;:27;;36166:5;:16;;;-1:-1:-1;;;;;36158:25:33;:69;36137:100;;36127:4;36132:1;36127:7;;;;;;;;:::i;34940:553::-;35094:5;35103:1;35094:10;35090:23;;34940:553;;;:::o;35090:23::-;35146:139;;-1:-1:-1;;;35146:139:33;;35122:21;;-1:-1:-1;;;;;35146:27:33;;;;;:139;;35195:4;;35214:9;;1779:7;;35283:1;;35146:139;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35146:139:33;;;;;;;;;;;;:::i;:::-;35122:163;;35351:5;35321:27;35329:4;35334:1;35329:7;;;;;;;;:::i;:::-;;;;;;;35321:16;;:25;:27::i;:::-;:35;;;;:::i;:::-;35305:53;;35295:4;35300:1;35295:7;;;;;;;;:::i;:::-;;;;;;;;;;:63;35368:118;;-1:-1:-1;;;35368:118:33;;-1:-1:-1;;;;;35368:30:33;;;;;:118;;35412:9;;1779:7;;35481:4;;35368:118;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35080:413;34940:553;;;:::o;3524:1858:31:-;3699:37;;:::i;:::-;3931:14;;;;3882:65;;-1:-1:-1;;;3882:65:31;;-1:-1:-1;;;;;4849:32:105;;;3882:65:31;;;4831:51:105;3738:19:31;;-1:-1:-1;;;;;;3894:10:31;;3882:38;;4804:18:105;;3882:65:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3967:3;;-1:-1:-1;3847:100:31;;-1:-1:-1;3847:100:31;-1:-1:-1;3847:100:31;-1:-1:-1;3847:100:31;3984:23;;;;;3999:8;3998:9;3984:23;3980:1396;;;4032:34;4051:6;4059;4032:18;:34::i;:::-;4023:43;;4096:6;:14;;;4085:8;:25;4115:1;4084:32;4080:1100;;4136:21;4204:36;4225:6;:14;;;4204:20;:36::i;:::-;4262:12;;4352:18;;;;;4392:20;;;;4462:12;;4262;4462;;;;;;;;4160:351;;4262:12;4304:4;;4352:18;4392:20;4434:6;;4160:351;;;;:::i;:::-;;;;-1:-1:-1;;4160:351:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;4160:351:31;-1:-1:-1;;;;;;4160:351:31;;;;;;;;;;4614:14;;;;4681;;;;4538:241;;-1:-1:-1;;;4538:241:31;;4160:351;;-1:-1:-1;4550:10:31;;4538:44;;:241;;4614:14;4160:351;;2011:13:42;4681:69:31;;;;;4772:6;;4538:241;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4538:241:31;;;;;;;;;;;;:::i;:::-;4811:41;;-1:-1:-1;;;4811:41:31;;4529:250;;-1:-1:-1;4823:10:31;;4811:33;;:41;;4529:250;;4811:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4811:41:31;;;;;;;;;;;;:::i;:::-;4798:54;;4997:167;5001:1;5004:159;5029:37;:6;:26;;;:35;:37::i;:::-;5088:74;5092:40;:10;:29;;;:38;:40::i;:::-;5134:10;:27;;;5088:3;:74::i;:::-;5004:3;:159::i;:::-;4997:3;:167::i;:::-;4967:27;;;:197;-1:-1:-1;4080:1100:31;5314:51;5332:3;5337:10;:27;;;5314:17;:51::i;:::-;5305:60;;3980:1396;3763:1619;;;3524:1858;;;;;;:::o;32283:221:33:-;32447:49;;-1:-1:-1;;;32447:49:33;;;35639:24:105;-1:-1:-1;;35700:2:105;35696:15;;;35692:53;35679:11;;;35672:74;-1:-1:-1;;;;;;35802:3:105;35780:16;;;35776:43;35762:12;;;35755:65;32403:11:33;;35836:12:105;;32447:49:33;;;;;;;;;;;;;32437:60;;;;;;32430:67;;32283:221;;;;:::o;33747:731::-;-1:-1:-1;;;;;;;;33867:10:33;-1:-1:-1;;;;;;;;;;;;;;;33942:45:33;;-1:-1:-1;;;33942:45:33;;33973:4;33942:45;;;36069:51:105;36136:18;;;36129:34;;;33985:1:33;36179:18:105;;;36172:34;33917:22:33;;-1:-1:-1;;;;;33942:22:33;;;;;36042:18:105;;33942:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33942:45:33;;;;;;;;;;;;:::i;:::-;33917:70;;33997:9;34017:5;34023:1;34017:8;;;;;;;;:::i;:::-;;;;;;;34009:17;;33997:29;;34036:9;34056:5;34062:1;34056:8;;;;;;;;:::i;:::-;;;;;;;34048:17;;34036:29;;34087:1;34083;:5;34075:13;;34102:5;34098:374;;;-1:-1:-1;;;;;34324:29:33;;;;;34367:37;;:24;;;:37;34457:3;34452:8;;;34418:23;;;:43;34098:374;33907:571;;;33747:731;;;;;:::o;38092:293::-;38236:142;;-1:-1:-1;;;38236:142:33;;-1:-1:-1;;;;;36536:15:105;;;38236:142:33;;;36518:34:105;36588:15;;36568:18;;;36561:43;1644:1:33;36620:18:105;;;36613:34;36695:10;36683:23;;36663:18;;;36656:51;38236:18:33;;:28;;36452:19:105;;38236:142:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38092:293;;;:::o;1099:576:93:-;1267:1;1229:26;751:20:95;745:27;;618:170;1229:26:93;-1:-1:-1;;;;;1229:40:93;;1221:82;;;;-1:-1:-1;;;1221:82:93;;36920:2:105;1221:82:93;;;36902:21:105;36959:2;36939:18;;;36932:30;36998:31;36978:18;;;36971:59;37047:18;;1221:82:93;36718:353:105;1221:82:93;1367:10;-1:-1:-1;;;;;1353:39:93;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1334:15;:13;:15::i;:::-;:60;1313:142;;;;-1:-1:-1;;;1313:142:93;;37278:2:105;1313:142:93;;;37260:21:105;37317:2;37297:18;;;37290:30;37356:34;37336:18;;;37329:62;-1:-1:-1;;;37407:18:105;;;37400:33;37450:19;;1313:142:93;37076:399:105;1313:142:93;-1:-1:-1;;;;;1486:27:93;;1494:4;1486:27;1465:99;;;;-1:-1:-1;;;1465:99:93;;37682:2:105;1465:99:93;;;37664:21:105;37721:2;37701:18;;;37694:30;37760:27;37740:18;;;37733:55;37805:18;;1465:99:93;37480:349:105;1465:99:93;1574:39;1602:10;988:20:95;964:87;839:228;1574:39:93;1628:40;1640:15;:13;:15::i;:::-;1628:40;;;38008:25:105;;;-1:-1:-1;;;;;38069:32:105;;38064:2;38049:18;;38042:60;37981:18;1628:40:93;;;;;;;1099:576;:::o;10353:394:33:-;-1:-1:-1;;;;;;;;10512:11:33;-1:-1:-1;;;;;;;;;;;;;;;10584:10:33;10610:35;10626:9;10637:7;10610:15;:35::i;:::-;10604:41;;10672:25;10686:5;10693:3;10672:13;:25::i;:::-;10655:42;-1:-1:-1;10655:42:33;-1:-1:-1;10655:42:33;10707:33;;;;-1:-1:-1;;;10707:33:33;;;;;;;:::i;:::-;10574:173;10353:394;;;;;;:::o;8826:1521::-;9203:5;-1:-1:-1;;;;;9203:19:33;;9223:9;9430:5;:24;;;-1:-1:-1;;;;;9422:33:33;9393:5;:16;;;9377:13;:32;;;;:::i;:::-;-1:-1:-1;;;;;9369:41:33;9361:50;;;:::i;:::-;9360:96;;;;:::i;:::-;9203:254;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9520:261;9544:5;9551:9;9755:5;:23;;;-1:-1:-1;;;;;9747:32:33;9719:5;:16;;;9703:13;:32;;;;:::i;:::-;-1:-1:-1;;;;;9695:41:33;9688:92;;;;:::i;9520:261::-;9860:16;;-1:-1:-1;;;;;9886:32:33;;;;-1:-1:-1;;;;;9928:25:33;;;9954:3;9959:23;9860:5;9959:16;:23::i;:::-;9928:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10067:7;9999:227;;10044:9;-1:-1:-1;;;;;9999:227:33;10025:5;-1:-1:-1;;;;;9999:227:33;;10088:13;10115;10142:5;:23;;;10179:5;:24;;;10217:8;9999:227;;;;;;;;;;:::i;:::-;;;;;;;;10280:37;;-1:-1:-1;;;10280:37:33;;-1:-1:-1;;;;;4849:32:105;;;10280:37:33;;;4831:51:105;10280:26:33;;;;;4804:18:105;;10280:37:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10279:38;10271:69;;;;-1:-1:-1;;;10271:69:33;;38913:2:105;10271:69:33;;;38895:21:105;38952:2;38932:18;;;38925:30;-1:-1:-1;;;38971:18:105;;;38964:48;39029:18;;10271:69:33;38711:342:105;38391:586:33;38536:23;38573:24;38634:18;:27;38675:5;38694:10;1644:1;-1:-1:-1;;;38634:176:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38634:176:33;;;;;;;;;;;;:::i;:::-;38613:197;;-1:-1:-1;38613:197:33;-1:-1:-1;38854:6:33;38849:122;38870:7;:14;38866:1;:18;38849:122;;;38918:42;38937:10;38949:7;38957:1;38949:10;;;;;;;;:::i;:::-;;;;;;;38918:18;:42::i;:::-;38905:7;38913:1;38905:10;;;;;;;;:::i;:::-;;;;;;;;;;:55;38886:3;;;:::i;:::-;;;38849:122;;;;38391:586;;;;;:::o;36250:865::-;36377:10;36389:29;;:::i;:::-;36459:45;;-1:-1:-1;;;36459:45:33;;36490:4;36459:45;;;36069:51:105;36136:18;;;36129:34;;;36502:1:33;36179:18:105;;;36172:34;36434:22:33;;-1:-1:-1;;;;;36459:22:33;;;;;36042:18:105;;36459:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36459:45:33;;;;;;;;;;;;:::i;:::-;36434:70;;36514:9;36534:5;36540:1;36534:8;;;;;;;;:::i;:::-;;;;;;;36526:17;;36514:29;;36553:9;36573:5;36579:1;36573:8;;;;;;;;:::i;:::-;;;;;;;36565:17;;36553:29;;36604:1;36600;:5;36592:13;;36619:5;36615:494;;;36680:4;36674:11;;;36640:15;;;;:47;;;;36725:7;;;36736:16;36724:28;;;36701:13;;;:52;36788:20;;36767:42;;-1:-1:-1;;;;;37024:29:33;;:16;;;:29;37094:3;37089:8;;;37067:11;;;:31;36424:691;;;36250:865;;;;;:::o;34575:359::-;34708:7;34731:21;34755:5;-1:-1:-1;;;;;34755:27:33;;34804:4;34823:9;1779:7;34892:1;34755:139;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34755:139:33;;;;;;;;;;;;:::i;:::-;34731:163;;34919:4;34924:1;34919:7;;;;;;;;:::i;:::-;;;;;;;34911:16;;34904:23;;;34575:359;;;;:::o;37687:399::-;37874:205;;-1:-1:-1;;;37874:205:33;;-1:-1:-1;;;;;41245:15:105;;;37874:205:33;;;41227:34:105;41297:15;;41277:18;;;41270:43;37839:12:33;41329:18:105;;;41322:34;;;-1:-1:-1;;;41372:18:105;;;41365:34;41415:19;;;41408:35;;;37839:12:33;37874:18;;:39;;41161:19:105;;37874:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37867:212;37687:399;-1:-1:-1;;;;37687:399:33:o;33456:285::-;33627:45;;-1:-1:-1;;;33627:45:33;;33658:4;33627:45;;;36069:51:105;36136:18;;;36129:34;;;33670:1:33;36179:18:105;;;36172:34;33576:10:33;;;;-1:-1:-1;;;;;33627:22:33;;;;;36042:18:105;;33627:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33627:45:33;;;;;;;;;;;;:::i;:::-;33602:70;;33682:9;33702:5;33708:1;33702:8;;;;;;;;:::i;:::-;;;;;;;;;;;33729:5;;;33456:285;-1:-1:-1;;;;;33456:285:33:o;32510:222::-;32675:49;;;-1:-1:-1;;;32675:49:33;;;41966:27:105;42031:2;42027:15;;;-1:-1:-1;;42023:53:105;42009:12;;;42002:75;42093:12;;;42086:28;;;-1:-1:-1;;42130:12:105;32675:49:33;41708:440:105;6392:493:31;6759:14;;;;6788:26;;;;6828:23;;;;6865:12;;6679:199;;-1:-1:-1;;;6679:199:31;;6523:19;;6691:10;;6679:39;;:199;;6732:3;;6679:199;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6679:199:31;;;;;;;;;;;;:::i;5388:998::-;5473:15;1623:13:42;5508:7:31;:60;5504:876;;-1:-1:-1;;;;5591:41:31;5388:998;-1:-1:-1;5388:998:31:o;5504:876::-;1776:13:42;5653:7:31;:60;5649:731;;-1:-1:-1;;;;5736:41:31;5388:998;-1:-1:-1;5388:998:31:o;5649:731::-;1932:13:42;5798:7:31;:63;5794:586;;-1:-1:-1;;;;5884:44:31;5388:998;-1:-1:-1;5388:998:31:o;5794:586::-;1699:13:42;5949:7:31;:59;5945:435;;-1:-1:-1;;;;6031:40:31;5388:998;-1:-1:-1;5388:998:31:o;5945:435::-;1852:13:42;6092:7:31;:59;6088:292;;-1:-1:-1;;;;6174:40:31;5388:998;-1:-1:-1;5388:998:31:o;6088:292::-;-1:-1:-1;;;;6326:43:31;5388:998;-1:-1:-1;5388:998:31:o;6088:292::-;5388:998;;;:::o;6891:287::-;7105:66;;-1:-1:-1;;;7105:66:31;;7021:19;;7117:10;;7105:38;;:66;;7144:3;;7149:21;;7105:66;;;:::i;7518:297:27:-;7574:6;-1:-1:-1;;;;;7699:5:27;:34;;7691:87;;;;-1:-1:-1;;;7691:87:27;;43254:2:105;7691:87:27;;;43236:21:105;43293:2;43273:18;;;43266:30;43332:34;43312:18;;;43305:62;-1:-1:-1;;;43383:18:105;;;43376:38;43431:19;;7691:87:27;43052:404:105;7357:89:31;7413:6;7434:1;7430;:5;:13;;7442:1;7430:13;;;-1:-1:-1;7438:1:31;;7357:89;-1:-1:-1;7357:89:31:o;7549:::-;7605:6;7626:1;7622;:5;:13;;7634:1;7622:13;;;-1:-1:-1;7630:1:31;7549:89;-1:-1:-1;7549:89:31:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:149:105:-;-1:-1:-1;;;;;107:31:105;;97:42;;87:70;;153:1;150;143:12;168:121;253:10;246:5;242:22;235:5;232:33;222:61;;279:1;276;269:12;294:188;362:20;;-1:-1:-1;;;;;411:46:105;;401:57;;391:85;;472:1;469;462:12;487:347;538:8;548:6;602:3;595:4;587:6;583:17;579:27;569:55;;620:1;617;610:12;569:55;-1:-1:-1;643:20:105;;-1:-1:-1;;;;;675:30:105;;672:50;;;718:1;715;708:12;672:50;755:4;747:6;743:17;731:29;;807:3;800:4;791:6;783;779:19;775:30;772:39;769:59;;;824:1;821;814:12;769:59;487:347;;;;;:::o;839:962::-;970:6;978;986;994;1002;1010;1063:3;1051:9;1042:7;1038:23;1034:33;1031:53;;;1080:1;1077;1070:12;1031:53;1119:9;1106:23;1138:49;1181:5;1138:49;:::i;:::-;1206:5;-1:-1:-1;1263:2:105;1248:18;;1235:32;1276;1235;1276;:::i;:::-;1327:7;-1:-1:-1;1386:2:105;1371:18;;1358:32;1399:51;1358:32;1399:51;:::i;:::-;1469:7;-1:-1:-1;1495:38:105;1529:2;1514:18;;1495:38;:::i;:::-;1485:48;;1584:3;1573:9;1569:19;1556:33;-1:-1:-1;;;;;1604:6:105;1601:30;1598:50;;;1644:1;1641;1634:12;1598:50;1683:58;1733:7;1724:6;1713:9;1709:22;1683:58;:::i;:::-;839:962;;;;-1:-1:-1;839:962:105;;-1:-1:-1;839:962:105;;1760:8;;839:962;-1:-1:-1;;;839:962:105:o;1806:258::-;1878:1;1888:113;1902:6;1899:1;1896:13;1888:113;;;1978:11;;;1972:18;1959:11;;;1952:39;1924:2;1917:10;1888:113;;;2019:6;2016:1;2013:13;2010:48;;;2054:1;2045:6;2040:3;2036:16;2029:27;2010:48;;1806:258;;;:::o;2069:257::-;2110:3;2148:5;2142:12;2175:6;2170:3;2163:19;2191:63;2247:6;2240:4;2235:3;2231:14;2224:4;2217:5;2213:16;2191:63;:::i;:::-;2308:2;2287:15;-1:-1:-1;;2283:29:105;2274:39;;;;2315:4;2270:50;;2069:257;-1:-1:-1;;2069:257:105:o;2331:217::-;2478:2;2467:9;2460:21;2441:4;2498:44;2538:2;2527:9;2523:18;2515:6;2498:44;:::i;2553:589::-;2655:6;2663;2671;2724:2;2712:9;2703:7;2699:23;2695:32;2692:52;;;2740:1;2737;2730:12;2692:52;2779:9;2766:23;2798:49;2841:5;2798:49;:::i;:::-;2866:5;-1:-1:-1;2923:2:105;2908:18;;2895:32;2936:51;2895:32;2936:51;:::i;:::-;3006:7;-1:-1:-1;3065:2:105;3050:18;;3037:32;3078;3037;3078;:::i;:::-;3129:7;3119:17;;;2553:589;;;;;:::o;3633:1047::-;3764:6;3772;3780;3788;3796;3804;3857:3;3845:9;3836:7;3832:23;3828:33;3825:53;;;3874:1;3871;3864:12;3825:53;3913:9;3900:23;3932:49;3975:5;3932:49;:::i;:::-;4000:5;-1:-1:-1;4057:2:105;4042:18;;4029:32;4070:51;4029:32;4070:51;:::i;:::-;4140:7;-1:-1:-1;4199:2:105;4184:18;;4171:32;4212;4171;4212;:::i;:::-;4263:7;-1:-1:-1;4322:2:105;4307:18;;4294:32;4335:51;4294:32;4335:51;:::i;4893:265::-;4952:6;5005:2;4993:9;4984:7;4980:23;4976:32;4973:52;;;5021:1;5018;5011:12;4973:52;5060:9;5047:23;5079:49;5122:5;5079:49;:::i;5345:749::-;5456:6;5464;5472;5480;5533:3;5521:9;5512:7;5508:23;5504:33;5501:53;;;5550:1;5547;5540:12;5501:53;5589:9;5576:23;5608:49;5651:5;5608:49;:::i;:::-;5676:5;-1:-1:-1;5733:2:105;5718:18;;5705:32;5746:51;5705:32;5746:51;:::i;:::-;5816:7;-1:-1:-1;5875:2:105;5860:18;;5847:32;5888;5847;5888;:::i;:::-;5939:7;-1:-1:-1;5998:2:105;5983:18;;5970:32;6011:51;5970:32;6011:51;:::i;:::-;5345:749;;;;-1:-1:-1;5345:749:105;;-1:-1:-1;;5345:749:105:o;6556:887::-;6678:6;6686;6694;6702;6710;6763:3;6751:9;6742:7;6738:23;6734:33;6731:53;;;6780:1;6777;6770:12;6731:53;6819:9;6806:23;6838:49;6881:5;6838:49;:::i;:::-;6906:5;-1:-1:-1;6963:2:105;6948:18;;6935:32;6976:51;6935:32;6976:51;:::i;:::-;7046:7;-1:-1:-1;7105:2:105;7090:18;;7077:32;7118;7077;7118;:::i;:::-;7169:7;-1:-1:-1;7227:2:105;7212:18;;7199:32;-1:-1:-1;;;;;7243:30:105;;7240:50;;;7286:1;7283;7276:12;7240:50;7325:58;7375:7;7366:6;7355:9;7351:22;7325:58;:::i;:::-;6556:887;;;;-1:-1:-1;6556:887:105;;-1:-1:-1;7402:8:105;;7299:84;6556:887;-1:-1:-1;;;6556:887:105:o;7448:802::-;7570:6;7578;7586;7594;7602;7655:3;7643:9;7634:7;7630:23;7626:33;7623:53;;;7672:1;7669;7662:12;7623:53;7711:9;7698:23;7730:49;7773:5;7730:49;:::i;:::-;7798:5;-1:-1:-1;7855:2:105;7840:18;;7827:32;7868;7827;7868;:::i;:::-;7919:7;-1:-1:-1;7945:38:105;7979:2;7964:18;;7945:38;:::i;8255:658::-;8366:6;8374;8382;8390;8443:3;8431:9;8422:7;8418:23;8414:33;8411:53;;;8460:1;8457;8450:12;8411:53;8499:9;8486:23;8518:49;8561:5;8518:49;:::i;:::-;8586:5;-1:-1:-1;8643:2:105;8628:18;;8615:32;8656:51;8615:32;8656:51;:::i;:::-;8726:7;-1:-1:-1;8785:2:105;8770:18;;8757:32;8798;8757;8798;:::i;:::-;8255:658;;;;-1:-1:-1;8849:7:105;;8903:2;8888:18;8875:32;;-1:-1:-1;;8255:658:105:o;9212:518::-;9315:6;9323;9331;9384:2;9372:9;9363:7;9359:23;9355:32;9352:52;;;9400:1;9397;9390:12;9352:52;9439:9;9426:23;9458:49;9501:5;9458:49;:::i;:::-;9526:5;-1:-1:-1;9583:2:105;9568:18;;9555:32;9596:51;9555:32;9596:51;:::i;:::-;9212:518;;9666:7;;-1:-1:-1;;;9720:2:105;9705:18;;;;9692:32;;9212:518::o;10057:450::-;10151:6;10159;10212:2;10200:9;10191:7;10187:23;10183:32;10180:52;;;10228:1;10225;10218:12;10180:52;10267:9;10254:23;10286:49;10329:5;10286:49;:::i;:::-;10354:5;-1:-1:-1;10411:2:105;10396:18;;10383:32;10424:51;10383:32;10424:51;:::i;:::-;10494:7;10484:17;;;10057:450;;;;;:::o;10512:476::-;10565:3;10603:5;10597:12;10630:6;10625:3;10618:19;10656:4;10685:2;10680:3;10676:12;10669:19;;10722:2;10715:5;10711:14;10743:1;10753:210;10767:6;10764:1;10761:13;10753:210;;;10832:13;;-1:-1:-1;;;;;10828:54:105;10816:67;;10903:12;;;;10938:15;;;;10789:1;10782:9;10753:210;;;-1:-1:-1;10979:3:105;;10512:476;-1:-1:-1;;;;;10512:476:105:o;10993:1368::-;11337:2;11349:21;;;11419:13;;11322:18;;;11441:22;;;11289:4;;11517;;11494:3;11479:19;;;11544:15;;;11289:4;11587:195;11601:6;11598:1;11595:13;11587:195;;;11666:13;;-1:-1:-1;;;;;11662:39:105;11650:52;;11722:12;;;;11757:15;;;;11698:1;11616:9;11587:195;;;-1:-1:-1;;;11818:19:105;;;11798:18;;;11791:47;11888:13;;11910:21;;;11986:15;;;;11949:12;;;12021:1;12031:206;12047:8;12042:3;12039:17;12031:206;;;12120:15;;12137:10;12116:32;12102:47;;12210:17;;;;12171:14;;;;12075:1;12066:11;12031:206;;;12035:3;;12284:9;12277:5;12273:21;12268:2;12257:9;12253:18;12246:49;12312:43;12349:5;12341:6;12312:43;:::i;:::-;12304:51;10993:1368;-1:-1:-1;;;;;;;;10993:1368:105:o;12366:796::-;12488:6;12496;12504;12512;12520;12573:3;12561:9;12552:7;12548:23;12544:33;12541:53;;;12590:1;12587;12580:12;12541:53;12629:9;12616:23;12648:49;12691:5;12648:49;:::i;:::-;12716:5;-1:-1:-1;12773:2:105;12758:18;;12745:32;12786;12745;12786;:::i;:::-;12837:7;-1:-1:-1;12891:2:105;12876:18;;12863:32;;-1:-1:-1;12946:2:105;12931:18;;12918:32;-1:-1:-1;;;;;12962:30:105;;12959:50;;;13005:1;13002;12995:12;13167:359;13261:6;13269;13322:2;13310:9;13301:7;13297:23;13293:32;13290:52;;;13338:1;13335;13328:12;13290:52;13377:9;13364:23;13396:49;13439:5;13396:49;:::i;:::-;13464:5;13516:2;13501:18;;;;13488:32;;-1:-1:-1;;;13167:359:105:o;14091:727::-;14204:6;14212;14220;14228;14281:2;14269:9;14260:7;14256:23;14252:32;14249:52;;;14297:1;14294;14287:12;14249:52;14336:9;14323:23;14355:49;14398:5;14355:49;:::i;:::-;14423:5;-1:-1:-1;14480:2:105;14465:18;;14452:32;14493;14452;14493;:::i;:::-;14544:7;-1:-1:-1;14602:2:105;14587:18;;14574:32;-1:-1:-1;;;;;14618:30:105;;14615:50;;;14661:1;14658;14651:12;14615:50;14700:58;14750:7;14741:6;14730:9;14726:22;14700:58;:::i;:::-;14091:727;;;;-1:-1:-1;14777:8:105;-1:-1:-1;;;;14091:727:105:o;14823:343::-;15025:2;15007:21;;;15064:2;15044:18;;;15037:30;-1:-1:-1;;;15098:2:105;15083:18;;15076:49;15157:2;15142:18;;14823:343::o;15171:127::-;15232:10;15227:3;15223:20;15220:1;15213:31;15263:4;15260:1;15253:15;15287:4;15284:1;15277:15;15303:128;15343:3;15374:1;15370:6;15367:1;15364:13;15361:39;;;15380:18;;:::i;:::-;-1:-1:-1;15416:9:105;;15303:128::o;15436:125::-;15476:4;15504:1;15501;15498:8;15495:34;;;15509:18;;:::i;:::-;-1:-1:-1;15546:9:105;;15436:125::o;15566:435::-;15619:3;15657:5;15651:12;15684:6;15679:3;15672:19;15710:4;15739:2;15734:3;15730:12;15723:19;;15776:2;15769:5;15765:14;15797:1;15807:169;15821:6;15818:1;15815:13;15807:169;;;15882:13;;15870:26;;15916:12;;;;15951:15;;;;15843:1;15836:9;15807:169;;16006:332;16213:6;16202:9;16195:25;16256:2;16251;16240:9;16236:18;16229:30;16176:4;16276:56;16328:2;16317:9;16313:18;16305:6;16276:56;:::i;16343:253::-;16383:3;-1:-1:-1;;;;;16472:2:105;16469:1;16465:10;16502:2;16499:1;16495:10;16533:3;16529:2;16525:12;16520:3;16517:21;16514:47;;;16541:18;;:::i;:::-;16577:13;;16343:253;-1:-1:-1;;;;16343:253:105:o;16601:246::-;16641:4;-1:-1:-1;;;;;16754:10:105;;;;16724;;16776:12;;;16773:38;;;16791:18;;:::i;:::-;16828:13;;16601:246;-1:-1:-1;;;16601:246:105:o;16852:553::-;16891:7;-1:-1:-1;;;;;16961:9:105;;;16989;;;17014:11;;;17033:10;;;17027:17;;17010:35;17007:61;;;17048:18;;:::i;:::-;-1:-1:-1;;;17124:1:105;17117:9;;17142:11;;;17162;;;17155:19;;17138:37;17135:63;;;17178:18;;:::i;:::-;17224:1;17221;17217:9;17207:19;;17271:1;17267:2;17262:11;17259:1;17255:19;17250:2;17246;17242:11;17238:37;17235:63;;;17278:18;;:::i;:::-;17343:1;17339:2;17334:11;17331:1;17327:19;17322:2;17318;17314:11;17310:37;17307:63;;;17350:18;;:::i;:::-;-1:-1:-1;;;17390:9:105;;;;;16852:553;-1:-1:-1;;;16852:553:105:o;17410:136::-;17445:3;-1:-1:-1;;;17466:22:105;;17463:48;;17491:18;;:::i;:::-;-1:-1:-1;17531:1:105;17527:13;;17410:136::o;17551:272::-;-1:-1:-1;;;;;17741:32:105;;;;17723:51;;17805:2;17790:18;;17783:34;17711:2;17696:18;;17551:272::o;17828:426::-;-1:-1:-1;;;;;18031:32:105;;18013:51;;-1:-1:-1;;;;;18100:47:105;;18095:2;18080:18;;18073:75;18184:2;18179;18164:18;;18157:30;;;-1:-1:-1;;18204:44:105;;18229:18;;18221:6;18204:44;:::i;:::-;18196:52;17828:426;-1:-1:-1;;;;;17828:426:105:o;18259:514::-;-1:-1:-1;;;;;18488:32:105;;18470:51;;18569:10;18557:23;;18552:2;18537:18;;18530:51;-1:-1:-1;;;;;18617:47:105;;18612:2;18597:18;;18590:75;18701:3;18696:2;18681:18;;18674:31;;;-1:-1:-1;;18722:45:105;;18747:19;;18739:6;18722:45;:::i;:::-;18714:53;18259:514;-1:-1:-1;;;;;;18259:514:105:o;19386:314::-;-1:-1:-1;;;;;19561:32:105;;19543:51;;19630:2;19625;19610:18;;19603:30;;;-1:-1:-1;;19650:44:105;;19675:18;;19667:6;19650:44;:::i;19705:400::-;-1:-1:-1;;;;;19906:32:105;;19888:51;;19987:10;19975:23;;19970:2;19955:18;;19948:51;20035:2;20030;20015:18;;20008:30;;;-1:-1:-1;;20055:44:105;;20080:18;;20072:6;20055:44;:::i;21430:184::-;21500:6;21553:2;21541:9;21532:7;21528:23;21524:32;21521:52;;;21569:1;21566;21559:12;21521:52;-1:-1:-1;21592:16:105;;21430:184;-1:-1:-1;21430:184:105:o;21619:168::-;21659:7;21725:1;21721;21717:6;21713:14;21710:1;21707:21;21702:1;21695:9;21688:17;21684:45;21681:71;;;21732:18;;:::i;:::-;-1:-1:-1;21772:9:105;;21619:168::o;22491:339::-;22693:2;22675:21;;;22732:2;22712:18;;;22705:30;-1:-1:-1;;;22766:2:105;22751:18;;22744:45;22821:2;22806:18;;22491:339::o;22835:217::-;22875:1;22901;22891:132;;22945:10;22940:3;22936:20;22933:1;22926:31;22980:4;22977:1;22970:15;23008:4;23005:1;22998:15;22891:132;-1:-1:-1;23037:9:105;;22835:217::o;23057:127::-;23118:10;23113:3;23109:20;23106:1;23099:31;23149:4;23146:1;23139:15;23173:4;23170:1;23163:15;23189:127;23250:10;23245:3;23241:20;23238:1;23231:31;23281:4;23278:1;23271:15;23305:4;23302:1;23295:15;23321:455;-1:-1:-1;;;;;23616:15:105;;;23598:34;;23668:15;;;;23663:2;23648:18;;23641:43;23715:2;23700:18;;23693:34;23758:2;23743:18;;23736:34;;;;23547:3;23532:19;;23321:455::o;23781:127::-;23842:10;23837:3;23833:20;23830:1;23823:31;23873:4;23870:1;23863:15;23897:4;23894:1;23887:15;23913:255;23985:2;23979:9;24027:6;24015:19;;-1:-1:-1;;;;;24049:34:105;;24085:22;;;24046:62;24043:88;;;24111:18;;:::i;:::-;24147:2;24140:22;23913:255;:::o;24173:275::-;24244:2;24238:9;24309:2;24290:13;;-1:-1:-1;;24286:27:105;24274:40;;-1:-1:-1;;;;;24329:34:105;;24365:22;;;24326:62;24323:88;;;24391:18;;:::i;:::-;24427:2;24420:22;24173:275;;-1:-1:-1;24173:275:105:o;24453:183::-;24513:4;-1:-1:-1;;;;;24538:6:105;24535:30;24532:56;;;24568:18;;:::i;:::-;-1:-1:-1;24613:1:105;24609:14;24625:4;24605:25;;24453:183::o;24641:659::-;24706:5;24759:3;24752:4;24744:6;24740:17;24736:27;24726:55;;24777:1;24774;24767:12;24726:55;24806:6;24800:13;24832:4;24856:60;24872:43;24912:2;24872:43;:::i;:::-;24856:60;:::i;:::-;24950:15;;;25036:1;25032:10;;;;25020:23;;25016:32;;;24981:12;;;;25060:15;;;25057:35;;;25088:1;25085;25078:12;25057:35;25124:2;25116:6;25112:15;25136:135;25152:6;25147:3;25144:15;25136:135;;;25218:10;;25206:23;;25249:12;;;;25169;;25136:135;;;-1:-1:-1;25289:5:105;24641:659;-1:-1:-1;;;;;;24641:659:105:o;25305:363::-;25400:6;25453:2;25441:9;25432:7;25428:23;25424:32;25421:52;;;25469:1;25466;25459:12;25421:52;25502:9;25496:16;-1:-1:-1;;;;;25527:6:105;25524:30;25521:50;;;25567:1;25564;25557:12;25521:50;25590:72;25654:7;25645:6;25634:9;25630:22;25590:72;:::i;25673:265::-;25712:3;25740:9;;;25765:10;;-1:-1:-1;;;;;25784:27:105;;;25777:35;;25761:52;25758:78;;;25816:18;;:::i;:::-;-1:-1:-1;;;25863:19:105;;;25856:27;;25848:36;;25845:62;;;25887:18;;:::i;:::-;-1:-1:-1;;25923:9:105;;25673:265::o;25943:201::-;25981:3;26009:10;26054:2;26047:5;26043:14;26081:2;26072:7;26069:15;26066:41;;26087:18;;:::i;:::-;26136:1;26123:15;;25943:201;-1:-1:-1;;;25943:201:105:o;27833:156::-;27912:13;;27934:49;27912:13;27934:49;:::i;27994:269::-;28064:6;28117:2;28105:9;28096:7;28092:23;28088:32;28085:52;;;28133:1;28130;28123:12;28085:52;28165:9;28159:16;28184:49;28227:5;28184:49;:::i;28614:164::-;28690:13;;28739;;28732:21;28722:32;;28712:60;;28768:1;28765;28758:12;28783:202;28850:6;28903:2;28891:9;28882:7;28878:23;28874:32;28871:52;;;28919:1;28916;28909:12;28871:52;28942:37;28969:9;28942:37;:::i;29330:160::-;29407:13;;29460:4;29449:16;;29439:27;;29429:55;;29480:1;29477;29470:12;29495:177;29573:13;;-1:-1:-1;;;;;;29615:32:105;;29605:43;;29595:71;;29662:1;29659;29652:12;29677:496;29730:5;29783:3;29776:4;29768:6;29764:17;29760:27;29750:55;;29801:1;29798;29791:12;29750:55;29830:6;29824:13;-1:-1:-1;;;;;29852:2:105;29849:26;29846:52;;;29878:18;;:::i;:::-;29922:55;29965:2;29946:13;;-1:-1:-1;;29942:27:105;29971:4;29938:38;29922:55;:::i;:::-;30002:2;29993:7;29986:19;30048:3;30041:4;30036:2;30028:6;30024:15;30020:26;30017:35;30014:55;;;30065:1;30062;30055:12;30014:55;30078:64;30139:2;30132:4;30123:7;30119:18;30112:4;30104:6;30100:17;30078:64;:::i;30178:1342::-;30274:6;30327:2;30315:9;30306:7;30302:23;30298:32;30295:52;;;30343:1;30340;30333:12;30295:52;30376:9;30370:16;-1:-1:-1;;;;;30446:2:105;30438:6;30435:14;30432:34;;;30462:1;30459;30452:12;30432:34;30485:22;;;;30541:6;30523:16;;;30519:29;30516:49;;;30561:1;30558;30551:12;30516:49;30587:22;;:::i;:::-;30632:31;30660:2;30632:31;:::i;:::-;30625:5;30618:46;30696:40;30732:2;30728;30724:11;30696:40;:::i;:::-;30691:2;30684:5;30680:14;30673:64;30783:2;30779;30775:11;30769:18;30764:2;30757:5;30753:14;30746:42;30820;30858:2;30854;30850:11;30820:42;:::i;:::-;30815:2;30808:5;30804:14;30797:66;30896:42;30933:3;30929:2;30925:12;30896:42;:::i;:::-;30890:3;30883:5;30879:15;30872:67;30978:3;30974:2;30970:12;30964:19;31008:2;30998:8;30995:16;30992:36;;;31024:1;31021;31014:12;30992:36;31061:55;31108:7;31097:8;31093:2;31089:17;31061:55;:::i;:::-;31055:3;31048:5;31044:15;31037:80;;31164:3;31160:2;31156:12;31150:19;31144:3;31137:5;31133:15;31126:44;31217:3;31213:2;31209:12;31203:19;31197:3;31190:5;31186:15;31179:44;31242:3;31232:13;;31291:2;31287;31283:11;31277:18;31272:2;31265:5;31261:14;31254:42;31315:3;31305:13;;31350:42;31388:2;31384;31380:11;31350:42;:::i;:::-;31345:2;31338:5;31334:14;31327:66;31412:3;31402:13;;31447:42;31485:2;31481;31477:11;31447:42;:::i;:::-;31431:14;;;31424:66;;;;31435:5;30178:1342;-1:-1:-1;;;;30178:1342:105:o;31752:342::-;31834:6;31842;31850;31903:2;31891:9;31882:7;31878:23;31874:32;31871:52;;;31919:1;31916;31909:12;31871:52;31942:37;31969:9;31942:37;:::i;:::-;31932:47;;31998:46;32040:2;32029:9;32025:18;31998:46;:::i;:::-;31988:56;;32084:2;32073:9;32069:18;32063:25;32053:35;;31752:342;;;;;:::o;32099:675::-;-1:-1:-1;;;;;32440:15:105;;;32422:34;;32492:15;;32487:2;32472:18;;32465:43;32539:2;32524:18;;32517:34;;;32402:3;32582:2;32567:18;;32560:31;;;32365:4;;32614:45;;32639:19;;32631:6;32614:45;:::i;:::-;32708:9;32700:6;32696:22;32690:3;32679:9;32675:19;32668:51;32736:32;32761:6;32753;32736:32;:::i;32779:576::-;-1:-1:-1;;;;;33041:32:105;;33023:51;;33110:3;33105:2;33090:18;;33083:31;;;-1:-1:-1;;33137:45:105;;33162:19;;33154:6;33137:45;:::i;:::-;33232:6;33225:14;33218:22;33213:2;33202:9;33198:18;33191:50;33289:9;33281:6;33277:22;33272:2;33261:9;33257:18;33250:50;33317:32;33342:6;33334;33317:32;:::i;:::-;33309:40;32779:576;-1:-1:-1;;;;;;;32779:576:105:o;33360:335::-;33439:6;33492:2;33480:9;33471:7;33467:23;33463:32;33460:52;;;33508:1;33505;33498:12;33460:52;33541:9;33535:16;-1:-1:-1;;;;;33566:6:105;33563:30;33560:50;;;33606:1;33603;33596:12;33560:50;33629:60;33681:7;33672:6;33661:9;33657:22;33629:60;:::i;34108:429::-;34372:1;34368;34363:3;34359:11;34355:19;34347:6;34343:32;34332:9;34325:51;34412:6;34407:2;34396:9;34392:18;34385:34;34455:2;34450;34439:9;34435:18;34428:30;34306:4;34475:56;34527:2;34516:9;34512:18;34504:6;34475:56;:::i;34542:836::-;-1:-1:-1;;;;;34929:15:105;;;34911:34;;34981:15;;34976:2;34961:18;;34954:43;35028:2;35013:18;;35006:34;;;35076:3;35071:2;35056:18;;35049:31;;;34854:4;;35103:45;;35128:19;;35120:6;35103:45;:::i;:::-;35197:9;35189:6;35185:22;35179:3;35168:9;35164:19;35157:51;35231:32;35256:6;35248;35231:32;:::i;:::-;35217:46;;35312:9;35304:6;35300:22;35294:3;35283:9;35279:19;35272:51;35340:32;35365:6;35357;35340:32;:::i;:::-;35332:40;34542:836;-1:-1:-1;;;;;;;;;34542:836:105:o;38113:593::-;38335:4;-1:-1:-1;;;;;38437:2:105;38429:6;38425:15;38414:9;38407:34;38489:2;38481:6;38477:15;38472:2;38461:9;38457:18;38450:43;38541:2;38533:6;38529:15;38524:2;38513:9;38509:18;38502:43;38593:2;38585:6;38581:15;38576:2;38565:9;38561:18;38554:43;;38634:3;38628;38617:9;38613:19;38606:32;38655:45;38695:3;38684:9;38680:19;38672:6;38655:45;:::i;39544:1207::-;39672:6;39680;39733:2;39721:9;39712:7;39708:23;39704:32;39701:52;;;39749:1;39746;39739:12;39701:52;39782:9;39776:16;-1:-1:-1;;;;;39852:2:105;39844:6;39841:14;39838:34;;;39868:1;39865;39858:12;39838:34;39906:6;39895:9;39891:22;39881:32;;39951:7;39944:4;39940:2;39936:13;39932:27;39922:55;;39973:1;39970;39963:12;39922:55;40002:2;39996:9;40024:4;40048:60;40064:43;40104:2;40064:43;:::i;40048:60::-;40142:15;;;40224:1;40220:10;;;;40212:19;;40208:28;;;40173:12;;;;40248:19;;;40245:39;;;40280:1;40277;40270:12;40245:39;40304:11;;;;40324:209;40340:6;40335:3;40332:15;40324:209;;;40413:3;40407:10;40430:30;40454:5;40430:30;:::i;:::-;40473:18;;40357:12;;;;40511;;;;40324:209;;;40588:18;;;40582:25;40552:5;;-1:-1:-1;40582:25:105;;-1:-1:-1;;;40619:16:105;;;40616:36;;;40648:1;40645;40638:12;40616:36;;40671:74;40737:7;40726:8;40715:9;40711:24;40671:74;:::i;:::-;40661:84;;;39544:1207;;;;;:::o;40756:135::-;40795:3;40816:17;;;40813:43;;40836:18;;:::i;:::-;-1:-1:-1;40883:1:105;40872:13;;40756:135::o;41454:249::-;41523:6;41576:2;41564:9;41555:7;41551:23;41547:32;41544:52;;;41592:1;41589;41582:12;41544:52;41624:9;41618:16;41643:30;41667:5;41643:30;:::i;42153:603::-;42455:3;42444:9;42437:22;42418:4;42476:45;42516:3;42505:9;42501:19;42493:6;42476:45;:::i;:::-;-1:-1:-1;;;;;42595:15:105;;;42590:2;42575:18;;42568:43;42642:2;42627:18;;42620:34;;;;-1:-1:-1;42685:2:105;42670:18;;42663:34;;;;42734:15;;;42728:3;42713:19;;;42706:44;;;;42468:53;42153:603;-1:-1:-1;42153:603:105:o;42761:286::-;42934:2;42923:9;42916:21;42897:4;42954:44;42994:2;42983:9;42979:18;42971:6;42954:44;:::i;:::-;42946:52;;43034:6;43029:2;43018:9;43014:18;43007:34;42761:286;;;;;:::o",
|
|
31243
|
-
"source": "// SPDX-License-Identifier: AGPLv3\npragma solidity 0.8.13;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport {\n IInstantDistributionAgreementV1,\n ISuperfluidToken\n} from \"../interfaces/agreements/IInstantDistributionAgreementV1.sol\";\nimport {\n ISuperfluid,\n ISuperfluidGovernance,\n ISuperApp,\n SuperAppDefinitions\n}\nfrom \"../interfaces/superfluid/ISuperfluid.sol\";\nimport { AgreementBase } from \"./AgreementBase.sol\";\n\nimport { SlotsBitmapLibrary } from \"../libs/SlotsBitmapLibrary.sol\";\nimport { AgreementLibrary } from \"./AgreementLibrary.sol\";\n\n\n/**\n * @title InstantDistributionAgreementV1 contract\n * @author Superfluid\n * @dev Please read IInstantDistributionAgreementV1 for implementation notes.\n * @dev For more technical notes, please visit protocol-monorepo wiki area.\n *\n */\ncontract InstantDistributionAgreementV1 is\n AgreementBase,\n IInstantDistributionAgreementV1\n{\n\n /*\n E_NO_INDEX - index does not exist\n E_INDEX_EXISTS - index already exists\n E_INDEX_GROW - index value should grow\n E_LOW_BALANCE - insufficient balance\n E_SUBS_APPROVED subscription already approved\n E_SUBS_NOT_APPROVED subscription not approved\n E_NO_SUBS - subscription does not exist\n E_NOT_ALLOWED - operation not allowed\n E_NO_ZERO_SUBS - no zero address subscribers\n */\n\n using SafeCast for uint256;\n\n address public constant SLOTS_BITMAP_LIBRARY_ADDRESS = address(SlotsBitmapLibrary);\n\n /// @dev Subscriber state slot id for storing subs bitmap\n uint256 private constant _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID = 0;\n /// @dev Publisher state slot id for storing its deposit amount\n uint256 private constant _PUBLISHER_DEPOSIT_STATE_SLOT_ID = 1 << 32;\n /// @dev Subscriber state slot id starting ptoint for subscription data\n uint256 private constant _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START = 1 << 128;\n\n /// @dev Maximum number of subscriptions a subscriber can have\n uint32 private constant _MAX_NUM_SUBS = 256;\n /// @dev A special id that indicating the subscription is not approved yet\n uint32 private constant _UNALLOCATED_SUB_ID = type(uint32).max;\n\n // solhint-disable-next-line no-empty-blocks\n constructor(ISuperfluid host) AgreementBase(address(host)) {}\n\n /// @dev Agreement data for the index\n struct IndexData {\n uint128 indexValue;\n uint128 totalUnitsApproved;\n uint128 totalUnitsPending;\n }\n\n /// @dev Agreement data for the subscription\n struct SubscriptionData {\n uint32 subId;\n address publisher;\n uint32 indexId;\n uint128 indexValue;\n uint128 units;\n }\n\n /**************************************************************************\n * ISuperAgreement interface\n *************************************************************************/\n\n /// @dev ISuperAgreement.realtimeBalanceOf implementation\n function realtimeBalanceOf(\n ISuperfluidToken token,\n address account,\n uint256 /*time*/\n )\n external view override\n returns (\n int256 dynamicBalance,\n uint256 deposit,\n uint256 owedDeposit\n )\n {\n // as a subscriber\n // read all subs and calculate the real-time balance\n uint32[] memory slotIds;\n bytes32[] memory sidList;\n (slotIds, sidList) = _listSubscriptionIds(token, account);\n for (uint32 i = 0; i < sidList.length; ++i) {\n bool exist;\n SubscriptionData memory sdata;\n bytes32 iId;\n\n {\n uint32 subId = slotIds[i];\n (exist, sdata) = _getSubscriptionData(token, sidList[i]);\n assert(exist);\n assert(sdata.subId == subId);\n //require(exist, \"IDA: E_NO_SUBS\");\n iId = token.getAgreementStateSlot(\n address(this),\n account,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START + subId, 1)[0];\n }\n\n {\n IndexData memory idata;\n (exist, idata) = _getIndexData(token, iId);\n assert(exist);\n dynamicBalance = dynamicBalance + (\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256(uint256(idata.indexValue - sdata.indexValue)) * int256(uint256(sdata.units))\n );\n }\n }\n\n // as a publisher\n // calculate the deposits due to pending subscriptions\n deposit = _getPublisherDeposit(token, account);\n owedDeposit = 0;\n }\n\n /**************************************************************************\n * Index operations\n *************************************************************************/\n\n /// @dev IInstantDistributionAgreementV1.createIndex implementation\n function createIndex(\n ISuperfluidToken token,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n bytes32 iId = _getPublisherId(publisher, indexId);\n require(!_hasIndexData(token, iId), \"IDA: E_INDEX_EXISTS\");\n\n token.createAgreement(iId, _encodeIndexData(IndexData(0, 0, 0)));\n\n emit IndexCreated(token, publisher, indexId, context.userData);\n\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n /// @dev IInstantDistributionAgreementV1.getIndex implementation\n function getIndex(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId\n )\n external view override\n returns (\n bool exist,\n uint128 indexValue,\n uint128 totalUnitsApproved,\n uint128 totalUnitsPending)\n {\n IndexData memory idata;\n bytes32 iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n if (exist) {\n indexValue = idata.indexValue;\n totalUnitsApproved = idata.totalUnitsApproved;\n totalUnitsPending = idata.totalUnitsPending;\n }\n }\n\n /// @dev IInstantDistributionAgreementV1.calculateDistribution implementation\n function calculateDistribution(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n uint256 amount\n )\n external view override\n returns(\n uint256 actualAmount,\n uint128 newIndexValue)\n {\n bytes32 iId = _getPublisherId(publisher, indexId);\n (bool exist, IndexData memory idata) = _getIndexData(token, iId);\n require(exist, \"IDA: E_NO_INDEX\");\n\n uint256 totalUnits = uint256(idata.totalUnitsApproved + idata.totalUnitsPending);\n uint128 indexDelta = (amount / totalUnits).toUint128();\n newIndexValue = idata.indexValue + indexDelta;\n actualAmount = uint256(indexDelta) * totalUnits;\n }\n\n /// @dev IInstantDistributionAgreementV1.updateIndex implementation\n function updateIndex(\n ISuperfluidToken token,\n uint32 indexId,\n uint128 indexValue,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n (bytes32 iId, IndexData memory idata) = _loadIndexData(token, publisher, indexId);\n require(indexValue >= idata.indexValue, \"IDA: E_INDEX_GROW\");\n\n _updateIndex(token, publisher, indexId, iId, idata, indexValue, context.userData);\n\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n /// @dev IInstantDistributionAgreementV1.distribute implementation\n function distribute(\n ISuperfluidToken token,\n uint32 indexId,\n uint256 amount,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n (bytes32 iId, IndexData memory idata) = _loadIndexData(token, publisher, indexId);\n uint256 totalUnits = uint256(idata.totalUnitsApproved + idata.totalUnitsPending);\n\n if (totalUnits > 0) {\n uint128 indexDelta = (amount / totalUnits).toUint128();\n _updateIndex(token, publisher, indexId, iId, idata, idata.indexValue + indexDelta, context.userData);\n }\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n function _updateIndex(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes32 iId,\n IndexData memory idata,\n uint128 newIndexValue,\n bytes memory userData\n )\n private\n {\n // - settle the publisher balance INSTANT-ly (ding ding ding, IDA)\n // - adjust static balance directly\n token.settleBalance(publisher,\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n (-int256(uint256(newIndexValue - idata.indexValue))) * int256(uint256(idata.totalUnitsApproved)));\n // - adjust the publisher's deposit amount\n _adjustPublisherDeposit(token, publisher,\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256(uint256(newIndexValue - idata.indexValue)) * int256(uint256(idata.totalUnitsPending)));\n // adjust the publisher's index data\n uint128 oldIndexValue = idata.indexValue;\n idata.indexValue = newIndexValue;\n token.updateAgreementData(iId, _encodeIndexData(idata));\n\n emit IndexUpdated(\n token,\n publisher,\n indexId,\n oldIndexValue,\n newIndexValue,\n idata.totalUnitsPending,\n idata.totalUnitsApproved,\n userData);\n\n // check account solvency\n require(!token.isAccountCriticalNow(publisher), \"IDA: E_LOW_BALANCE\");\n }\n\n function _loadIndexData(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId)\n private view\n returns (\n bytes32 iId,\n IndexData memory idata\n )\n {\n bool exist;\n iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n require(exist, \"IDA: E_NO_INDEX\");\n }\n\n /**************************************************************************\n * Subscription operations\n *************************************************************************/\n\n // Stack variables to avoid stack too deep errors in some functions\n // solhint-disable-next-line contract-name-camelcase\n struct _SubscriptionOperationVars {\n bytes32 iId;\n bool subscriptionExists;\n bytes32 sId;\n IndexData idata;\n SubscriptionData sdata;\n bytes cbdata;\n }\n\n /// @dev IInstantDistributionAgreementV1.approveSubscription implementation\n function approveSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address subscriber;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n subscriber = context.msgSender;\n userData = context.userData;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n vars.subscriptionExists,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n if (vars.subscriptionExists) {\n // required condition check\n require(vars.sdata.subId == _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_APPROVED\");\n }\n\n newCtx = ctx;\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n\n if (!vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_CREATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n\n vars.sdata = SubscriptionData({\n publisher: publisher,\n indexId: indexId,\n subId: 0,\n units: 0,\n indexValue: vars.idata.indexValue\n });\n // add to subscription list of the subscriber\n vars.sdata.subId = _findAndFillSubsBitmap(token, subscriber, vars.iId);\n token.createAgreement(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_CREATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // update publisher data and adjust publisher's deposits\n vars.idata.totalUnitsApproved += vars.sdata.units;\n vars.idata.totalUnitsPending -= vars.sdata.units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n\n // update subscription data and adjust subscriber's balance\n token.settleBalance(subscriber, balanceDelta);\n vars.sdata.indexValue = vars.idata.indexValue;\n vars.sdata.subId = _findAndFillSubsBitmap(token, subscriber, vars.iId);\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n }\n\n // can index up to three words, hence splitting into two events from publisher or subscriber's view.\n emit IndexSubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionApproved(token, subscriber, publisher, indexId, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.revokeSubscription implementation\n function revokeSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address subscriber;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n subscriber = context.msgSender;\n userData = context.userData;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n // should not revoke an pending(un-approved) subscription\n require(vars.sdata.subId != _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_NOT_APPROVED\");\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_TERMINATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE downcasting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n vars.idata.totalUnitsApproved = vars.idata.totalUnitsApproved - vars.sdata.units;\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending + vars.sdata.units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n\n // remove subscription from subscriber's bitmap\n _clearSubsBitmap(token, subscriber, vars.sdata.subId);\n\n // sync pending distributions\n vars.sdata.indexValue = vars.idata.indexValue;\n // unlink publisher and subscriber\n vars.sdata.subId = _UNALLOCATED_SUB_ID;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n // settle subscriber static balance as a result to keep balance unchanged\n token.settleBalance(subscriber, balanceDelta);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_TERMINATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n\n emit IndexUnsubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionRevoked(token, subscriber, publisher, indexId, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.updateSubscription implementation\n function updateSubscription(\n ISuperfluidToken token,\n uint32 indexId,\n address subscriber,\n uint128 units,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n bytes memory userData;\n address publisher;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n userData = context.userData;\n publisher = context.msgSender;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n vars.subscriptionExists,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n subscriber,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n // before-hook callback\n if (vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_CREATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n }\n\n // update publisher data\n if (vars.subscriptionExists && vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n // if the subscription exist and not approved, update the approved units amount\n\n // update total units\n vars.idata.totalUnitsApproved = (\n uint256(vars.idata.totalUnitsApproved) +\n uint256(units) -\n uint256(vars.sdata.units)\n ).toUint128();\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n } else if (vars.subscriptionExists) {\n // if the subscription exists and approved, update the pending units amount\n\n // update pending subscription units of the publisher\n vars.idata.totalUnitsPending = (\n uint256(vars.idata.totalUnitsPending) +\n uint256(units) -\n uint256(vars.sdata.units)\n ).toUint128();\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n } else {\n // if the E_NO_SUBS, create it and then update the pending units amount\n\n // create unallocated subscription\n vars.sdata = SubscriptionData({\n publisher: publisher,\n indexId: indexId,\n subId: _UNALLOCATED_SUB_ID,\n units: units,\n indexValue: vars.idata.indexValue\n });\n token.createAgreement(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending + units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n }\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // adjust publisher's deposit and balances if subscription is pending\n if (vars.sdata.subId == _UNALLOCATED_SUB_ID) {\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n }\n\n // settle subscriber static balance\n token.settleBalance(subscriber, balanceDelta);\n\n // update subscription data if necessary\n if (vars.subscriptionExists) {\n vars.sdata.indexValue = vars.idata.indexValue;\n vars.sdata.units = units;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n }\n\n // after-hook callback\n if (vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_CREATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n }\n\n emit IndexUnitsUpdated(token, publisher, indexId, subscriber, units, userData);\n emit SubscriptionUnitsUpdated(token, subscriber, publisher, indexId, units, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.getSubscription implementation\n function getSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber\n )\n external view override\n returns (\n bool exist,\n bool approved,\n uint128 units,\n uint256 pendingDistribution\n )\n {\n bytes32 iId;\n bytes32 sId;\n IndexData memory idata;\n SubscriptionData memory sdata;\n\n (\n iId,\n sId,\n idata,\n exist,\n sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n if (!exist) return (false, false, 0, 0);\n approved = sdata.subId != _UNALLOCATED_SUB_ID;\n units = sdata.units;\n pendingDistribution = approved ? 0 : uint256(idata.indexValue - sdata.indexValue) * uint256(sdata.units);\n }\n\n /// @dev IInstantDistributionAgreementV1.getSubscriptionByID implementation\n function getSubscriptionByID(\n ISuperfluidToken token,\n bytes32 agreementId\n )\n external view override\n returns(\n address publisher,\n uint32 indexId,\n bool approved,\n uint128 units,\n uint256 pendingDistribution\n )\n {\n bool exist;\n bytes32 iId;\n IndexData memory idata;\n SubscriptionData memory sdata;\n\n (exist, sdata) = _getSubscriptionData(token, agreementId);\n require(exist, \"IDA: E_NO_SUBS\");\n\n publisher = sdata.publisher;\n indexId = sdata.indexId;\n iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n assert(exist);\n\n approved = sdata.subId != _UNALLOCATED_SUB_ID;\n units = sdata.units;\n pendingDistribution = approved ? 0 :\n uint256(idata.indexValue - sdata.indexValue) * uint256(sdata.units);\n }\n\n /// @dev IInstantDistributionAgreementV1.listSubscriptions implementation\n function listSubscriptions(\n ISuperfluidToken token,\n address subscriber\n )\n external view override\n returns(\n address[] memory publishers,\n uint32[] memory indexIds,\n uint128[] memory unitsList)\n {\n uint32[] memory slotIds;\n bytes32[] memory sidList;\n (slotIds, sidList) = _listSubscriptionIds(token, subscriber);\n bool exist;\n SubscriptionData memory sdata;\n publishers = new address[](sidList.length);\n indexIds = new uint32[](sidList.length);\n unitsList = new uint128[](sidList.length);\n for (uint32 i = 0; i < sidList.length; ++i) {\n uint32 subId = slotIds[i];\n bytes32 sId = sidList[i];\n (exist, sdata) = _getSubscriptionData(token, sId);\n assert(exist);\n assert(sdata.subId == subId);\n publishers[i] = sdata.publisher;\n indexIds[i] = sdata.indexId;\n unitsList[i] = sdata.units;\n }\n }\n\n /// @dev IInstantDistributionAgreementV1.deleteSubscription implementation\n function deleteSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address sender;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n sender = context.msgSender;\n userData = context.userData;\n }\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n\n // only publisher can delete a subscription\n // follows from the invariant that only the publisher\n // has the ability to modify the units a subscriber has\n require(sender == publisher, \"IDA: E_NOT_ALLOWED\");\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n subscriber,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_TERMINATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // update publisher index agreement data\n if (vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n vars.idata.totalUnitsApproved = vars.idata.totalUnitsApproved - vars.sdata.units;\n } else {\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending - vars.sdata.units;\n }\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n\n // remove subscription from subscriber's bitmap\n if (vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n _clearSubsBitmap(token, subscriber, vars.sdata.subId);\n }\n\n // move from publisher's deposit to static balance\n if (vars.sdata.subId == _UNALLOCATED_SUB_ID) {\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n }\n\n // terminate subscription agreement data\n token.terminateAgreement(vars.sId, 2);\n\n // settle subscriber static balance\n token.settleBalance(subscriber, balanceDelta);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_TERMINATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n\n emit IndexUnsubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionRevoked(token, subscriber, publisher, indexId, userData);\n emit IndexUnitsUpdated(token, publisher, indexId, subscriber, 0, userData);\n emit SubscriptionUnitsUpdated(token, subscriber, publisher, indexId, 0, userData);\n }\n\n function claim(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n AgreementLibrary.authorizeTokenAccess(token, ctx);\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n // required condition check\n require(vars.sdata.subId == _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_APPROVED\");\n\n uint256 pendingDistribution = uint256(vars.idata.indexValue - vars.sdata.indexValue)\n * uint256(vars.sdata.units);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n if (pendingDistribution > 0) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n\n // adjust publisher's deposits\n _adjustPublisherDeposit(token, publisher, -int256(pendingDistribution));\n token.settleBalance(publisher, -int256(pendingDistribution));\n\n // update subscription data and adjust subscriber's balance\n vars.sdata.indexValue = vars.idata.indexValue;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n token.settleBalance(subscriber, int256(pendingDistribution));\n\n emit IndexDistributionClaimed(token, publisher, indexId, subscriber, pendingDistribution);\n emit SubscriptionDistributionClaimed(token, subscriber, publisher, indexId, pendingDistribution);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n // nothing to be recorded in this case\n newCtx = ctx;\n }\n }\n\n function _loadAllData(\n ISuperfluidToken token,\n address publisher,\n address subscriber,\n uint32 indexId,\n bool requireSubscriptionExisting\n )\n private view\n returns (\n bytes32 iId,\n bytes32 sId,\n IndexData memory idata,\n bool subscriptionExists,\n SubscriptionData memory sdata\n )\n {\n bool indexExists;\n iId = _getPublisherId(publisher, indexId);\n sId = _getSubscriptionId(subscriber, iId);\n (indexExists, idata) = _getIndexData(token, iId);\n require(indexExists, \"IDA: E_NO_INDEX\");\n (subscriptionExists, sdata) = _getSubscriptionData(token, sId);\n if (requireSubscriptionExisting) {\n require(subscriptionExists, \"IDA: E_NO_SUBS\");\n // sanity check\n assert(sdata.publisher == publisher);\n assert(sdata.indexId == indexId);\n }\n }\n\n /**************************************************************************\n * internal helpers\n *************************************************************************/\n\n function _getPublisherId(\n address publisher,\n uint32 indexId\n )\n private pure\n returns (bytes32 iId)\n {\n return keccak256(abi.encodePacked(\"publisher\", publisher, indexId));\n }\n\n function _getSubscriptionId(\n address subscriber,\n bytes32 iId\n )\n private pure\n returns (bytes32 sId)\n {\n return keccak256(abi.encodePacked(\"subscription\", subscriber, iId));\n }\n\n // # Index data operations\n //\n // Data packing:\n //\n // WORD 1: | existence bit | indexValue |\n // | 128b | 128b |\n // WORD 2: | totalUnitsPending | totalUnitsApproved |\n // | 128b | 12b |\n\n function _encodeIndexData(\n IndexData memory idata\n )\n private pure\n returns (bytes32[] memory data) {\n data = new bytes32[](2);\n data[0] = bytes32(\n uint256(1 << 128) /* existance bit */ |\n uint256(idata.indexValue)\n );\n data[1] = bytes32(\n (uint256(idata.totalUnitsApproved)) |\n (uint256(idata.totalUnitsPending) << 128)\n );\n }\n\n function _hasIndexData(\n ISuperfluidToken token,\n bytes32 iId\n )\n private view\n returns (bool exist)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), iId, 2);\n uint256 a = uint256(adata[0]);\n exist = a > 0;\n }\n\n function _getIndexData(\n ISuperfluidToken token,\n bytes32 iId\n )\n private view\n returns (bool exist, IndexData memory idata)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), iId, 2);\n uint256 a = uint256(adata[0]);\n uint256 b = uint256(adata[1]);\n exist = a > 0;\n if (exist) {\n // NOTE We will do an unsafe downcast from uint256 => uint128\n // as we know this is safe\n // see https://gist.github.com/0xdavinchee/9834dc689543f19ec07872ad7d766b09\n idata.indexValue = uint128(a);\n idata.totalUnitsApproved = uint128(b);\n idata.totalUnitsPending = uint128(b >> 128);\n }\n }\n\n\n // # Publisher's deposit amount\n //\n // It is stored in state slot in one word\n\n function _getPublisherDeposit(\n ISuperfluidToken token,\n address publisher\n )\n private view\n returns (uint256)\n {\n bytes32[] memory data = token.getAgreementStateSlot(\n address(this),\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n 1);\n return uint256(data[0]);\n }\n\n function _adjustPublisherDeposit(\n ISuperfluidToken token,\n address publisher,\n int256 delta\n )\n private\n {\n if (delta == 0) return;\n bytes32[] memory data = token.getAgreementStateSlot(\n address(this),\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n 1);\n data[0] = bytes32(uint256(uint256(data[0]).toInt256() + delta));\n token.updateAgreementStateSlot(\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n data);\n }\n\n // # Subscription data operations\n //\n // Data packing:\n //\n // WORD 1: | publisher | RESERVED | indexId | subId |\n // | 160b | 32b | 32b | 32b |\n // WORD 2: | units | indexValue |\n // | 128b | 128b |\n\n function _encodeSubscriptionData(\n SubscriptionData memory sdata\n )\n private pure\n returns (bytes32[] memory data)\n {\n data = new bytes32[](2);\n data[0] = bytes32(\n (uint256(uint160(sdata.publisher)) << (12*8)) |\n (uint256(sdata.indexId) << 32) |\n uint256(sdata.subId)\n );\n data[1] = bytes32(\n uint256(sdata.indexValue) |\n (uint256(sdata.units) << 128)\n );\n }\n\n function _getSubscriptionData(\n ISuperfluidToken token,\n bytes32 sId\n )\n private view\n returns (bool exist, SubscriptionData memory sdata)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), sId, 2);\n uint256 a = uint256(adata[0]);\n uint256 b = uint256(adata[1]);\n exist = a > 0;\n if (exist) {\n sdata.publisher = address(uint160(a >> (12*8)));\n sdata.indexId = uint32((a >> 32) & type(uint32).max);\n sdata.subId = uint32(a & type(uint32).max);\n // NOTE We will do an unsafe downcast from uint256 => uint128\n // as we know this is safe\n // see https://gist.github.com/0xdavinchee/9834dc689543f19ec07872ad7d766b09\n sdata.indexValue = uint128(b);\n sdata.units = uint128(b >> 128);\n }\n }\n\n // # Subscription bitmap operations\n //\n // ## Subscription bitmap state slot\n //\n // slotId: _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID)\n //\n // Subscriber can store up to _MAX_NUM_SUBS amount of subscriptions.\n // For each subscription approved it allocated with a subId with a value in [0, _MAX_NUM_SUBS).\n // The allocation is to fill one bit in the subscription bitmap.\n //\n // ## Subscription reference state slots\n //\n // slotId: _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START + subId)\n //\n // It stores the index data ID.\n\n function _findAndFillSubsBitmap(\n ISuperfluidToken token,\n address subscriber,\n bytes32 iId\n )\n private\n returns (uint32 subId)\n {\n return SlotsBitmapLibrary.findEmptySlotAndFill(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START,\n iId);\n }\n\n function _clearSubsBitmap(\n ISuperfluidToken token,\n address subscriber,\n uint32 subId\n )\n private\n {\n SlotsBitmapLibrary.clearSlot(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n subId);\n }\n\n function _listSubscriptionIds(\n ISuperfluidToken token,\n address subscriber\n )\n private view\n returns (\n uint32[] memory slotIds,\n bytes32[] memory sidList)\n {\n (slotIds, sidList) = SlotsBitmapLibrary.listData(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START);\n // map data to subId\n for (uint i = 0; i < sidList.length; ++i) {\n sidList[i] = _getSubscriptionId(subscriber, sidList[i]);\n }\n }\n\n}\n",
|
|
31242
|
+
"deployedSourceMap": "839:38141:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17805:4686;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5736:635;;;;;;:::i;:::-;;:::i;:::-;;;;3397:14:105;;3390:22;3372:41;;-1:-1:-1;;;;;3502:15:105;;;3497:2;3482:18;;3475:43;3554:15;;;3534:18;;;3527:43;;;;3606:15;3601:2;3586:18;;3579:43;3359:3;3344:19;5736:635:33;3147:481:105;25648:3218:33;;;;;;:::i;:::-;;:::i;1428:82::-;;1483:27;1428:82;;;;;-1:-1:-1;;;;;4849:32:105;;;4831:51;;4819:2;4804:18;1428:82:33;4685:203:105;632:191:30;;;;;;:::i;:::-;;:::i;:::-;;400:122:93;;;:::i;481:145:30:-;;;:::i;:::-;;;5309:25:105;;;5297:2;5282:18;481:145:30;5163:177:105;22573:864:33;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;6343:14:105;;6336:22;6318:41;;6402:14;;6395:22;6390:2;6375:18;;6368:50;-1:-1:-1;;;;;6454:47:105;6449:2;6434:18;;6427:75;6533:2;6518:18;;6511:34;6305:3;6290:19;;6099:452;15099:2621:33;;;;;;:::i;:::-;;:::i;1918:168:40:-;2001:78;1918:168;;7252:673:33;;;;;;:::i;:::-;;:::i;6459:715::-;;;;;;:::i;:::-;;:::i;:::-;;;;9092:25:105;;;-1:-1:-1;;;;;9153:47:105;;;9148:2;9133:18;;9126:75;9065:18;6459:715:33;8918:289:105;2968:1763:33;;;;;;:::i;:::-;;:::i;:::-;;;;9935:25:105;;;9991:2;9976:18;;9969:34;;;;10019:18;;;10012:34;9923:2;9908:18;2968:1763:33;9735:317:105;28872:2264:33;;;;;;:::i;:::-;;:::i;11365:3649::-;;;;;;:::i;:::-;;:::i;24545:1018::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;8002:818::-;;;;;;:::i;:::-;;:::i;23523:938::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;13800:32:105;;;13782:51;;13881:10;13869:23;;;13864:2;13849:18;;13842:51;13936:14;;13929:22;13909:18;;;13902:50;;;;-1:-1:-1;;;;;13988:47:105;;;13983:2;13968:18;;13961:75;14067:3;14052:19;;14045:35;13769:3;13754:19;23523:938:33;13531:555:105;4994:667:33;;;;;;:::i;:::-;;:::i;17805:4686::-;18016:19;-1:-1:-1;;;;;18059:24:33;;18051:56;;;;-1:-1:-1;;;18051:56:33;;;;;;;:::i;:::-;;;;;;;;;18117:38;;:::i;:::-;18165:47;;:::i;:::-;18222:21;18253:17;18294:34;18331:49;18369:5;18376:3;;18331:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18331:37:33;;-1:-1:-1;;;18331:49:33:i;:::-;18294:86;;18405:7;:16;;;18394:27;;18447:7;:17;;;18435:29;;18280:195;18627:58;18640:5;18647:9;18658:10;18670:7;18679:5;18627:12;:58::i;:::-;18604:10;;;18485:200;;;18567:23;;;;18485:200;;;;18543:10;;;18485:200;;;;18521:8;;;;18485:200;;;;;;18707:119;;;;;;;;18499:8;18707:119;;;;18758:5;;18777:10;;18707:37;:119::i;:::-;18696:130;;18845:3;;18836:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18895:23:33;;;;18836:12;;-1:-1:-1;;18891:389:33;;;1776:13:42;18934:16:33;;;:68;19030:56;18934:8;19079:6;19030:38;:56::i;:::-;19016:11;;;:70;18891:389;;;1623:13:42;19117:16:33;;;:68;19213:56;19117:8;19262:6;19213:38;:56::i;:::-;19199:11;;;:70;18891:389;19327:4;:23;;;:66;;;;-1:-1:-1;19354:10:33;;;;:16;2192;19354:39;;;;;19327:66;19323:1625;;;19568:159;19684:4;:10;;;:16;;;-1:-1:-1;;;;;19676:25:33;19651:5;-1:-1:-1;;;;;19643:14:33;19594:4;:10;;;:29;;;-1:-1:-1;;;;;19586:38:33;:71;;;;:::i;:::-;:115;;;;:::i;:::-;19568:157;:159::i;:::-;19536:10;;;;;-1:-1:-1;;;;;19536:191:33;;;:29;;;;:191;;;;19767:8;;19794:10;;-1:-1:-1;;;;;19741:25:33;;;;;19777:28;;:16;:28::i;:::-;19741:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19323:1625;;;19827:4;:23;;;19823:1125;;;20052:158;20167:4;:10;;;:16;;;-1:-1:-1;;;;;20159:25:33;20134:5;-1:-1:-1;;;;;20126:14:33;20078:4;:10;;;:28;;;-1:-1:-1;;;;;20070:37:33;:70;;;;:::i;20052:158::-;20021:10;;;;;-1:-1:-1;;;;;20021:189:33;;;:28;;;;:189;;;;20250:8;;20277:10;;-1:-1:-1;;;;;20224:25:33;;;;;20260:28;;:16;:28::i;19823:1125::-;20465:229;;;;;;;;2192:16;20465:229;;;;;;20511:9;-1:-1:-1;;;;;20465:229:33;;;;;20547:7;20465:229;;;;;;20658:4;:10;;;:21;;;-1:-1:-1;;;;;20465:229:33;;;;;20623:5;-1:-1:-1;;;;;20465:229:33;;;;20452:4;:10;;:242;;;;20708:5;-1:-1:-1;;;;;20708:21:33;;20730:4;:8;;;20740:35;20764:4;:10;;;20740:23;:35::i;:::-;20708:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20853:5;20822:4;:10;;;:28;;;:36;;;;:::i;:::-;20791:10;;;;;-1:-1:-1;;;;;20791:67:33;;;:28;;;;:67;;;;20898:8;;20925:10;;-1:-1:-1;;;;;20872:25:33;;;;;20908:28;;:16;:28::i;:::-;20872:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19823:1125;21063:19;21177:4;:10;;;:16;;;-1:-1:-1;;;;;21169:25:33;21124:4;:10;;;:21;;;21100:4;:10;;;:21;;;:45;;;;:::i;:::-;-1:-1:-1;;;;;21092:54:33;21085:110;;;;:::i;:::-;21063:132;;2192:16;21288:39;;:4;:10;;;:16;;;:39;;;21284:185;;21343:56;21367:5;21374:9;21385:13;21386:12;21385:13;:::i;:::-;21343:23;:56::i;:::-;-1:-1:-1;;;;;21413:19:33;;;21433:9;21444:13;21445:12;21444:13;:::i;:::-;21413:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21284:185;21523:45;;-1:-1:-1;;;21523:45:33;;-1:-1:-1;;;;;21523:19:33;;;;;:45;;21543:10;;21555:12;;21523:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21632:4;:23;;;21628:223;;;21695:10;;;;;:21;21671:10;;;;;;-1:-1:-1;;;;;21671:45:33;;;:21;;:45;;;;21730:10;;:24;;;:16;;:24;21794:8;;;;21828:10;;-1:-1:-1;;;;;21768:25:33;;;;;21804:35;;:23;:35::i;:::-;21768:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21628:223;21896:4;:23;;;21892:409;;;1852:13:42;21935:16:33;;;:67;22077:11;;;;22029:68;;21935:8;;22090:6;22029:37;:68::i;:::-;22016:81;-1:-1:-1;21892:409:33;;-1:-1:-1;21892:409:33;;1699:13:42;22128:16:33;;;:67;22270:11;;;;22222:68;;22128:8;;22283:6;22222:37;:68::i;:::-;22209:81;-1:-1:-1;;21892:409:33;22352:7;22316:73;;22341:9;-1:-1:-1;;;;;22316:73:33;22334:5;-1:-1:-1;;;;;22316:73:33;;22361:10;22373:5;22380:8;22316:73;;;;;;;;:::i;:::-;;;;;;;;22436:10;-1:-1:-1;;;;;22404:80:33;22429:5;-1:-1:-1;;;;;22404:80:33;;22448:9;22459:7;22468:5;22475:8;22404:80;;;;;;;;;:::i;:::-;;;;;;;;18041:4450;;;;;17805:4686;;;;;;;;:::o;5736:635::-;5904:10;5928:18;5960:26;6000:25;6041:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:22:33;6073:11;6087:35;6103:9;6114:7;6087:15;:35::i;:::-;6073:49;;6149:25;6163:5;6170:3;6149:13;:25::i;:::-;6132:42;;-1:-1:-1;6132:42:33;-1:-1:-1;6184:181:33;;;;6222:16;;6273:24;;;;6331:23;;;;6222:16;;-1:-1:-1;6273:24:33;-1:-1:-1;6331:23:33;-1:-1:-1;6184:181:33;6031:340;;5736:635;;;;;;;:::o;25648:3218::-;25863:19;25898:38;;:::i;:::-;25946:47;;:::i;:::-;26003:14;26027:21;26072:34;26109:49;26147:5;26154:3;;26109:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26109:37:33;;-1:-1:-1;;;26109:49:33:i;:::-;26181:17;;;;26223:16;;;;;26181:17;;-1:-1:-1;26223:16:33;-1:-1:-1;;;;;;;26267:24:33;;26259:56;;;;-1:-1:-1;;;26259:56:33;;;;;;;:::i;:::-;26522:9;-1:-1:-1;;;;;26512:19:33;:6;-1:-1:-1;;;;;26512:19:33;;26504:50;;;;-1:-1:-1;;;26504:50:33;;18980:2:105;26504:50:33;;;18962:21:105;19019:2;18999:18;;;18992:30;-1:-1:-1;;;19038:18:105;;;19031:48;19096:18;;26504:50:33;18778:342:105;26504:50:33;26684:57;26697:5;26704:9;26715:10;26727:7;26736:4;26684:12;:57::i;:::-;26661:10;;;26565:176;-1:-1:-1;26623:10:33;;;26565:176;26601:8;;;;26565:176;;;;;;26763:119;;-1:-1:-1;26763:119:33;;;;;26579:8;26763:119;;;;26814:5;;26833:10;;26763:37;:119::i;:::-;26752:130;;26901:3;;26892:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1932:13:42;26915:16:33;;;:71;-1:-1:-1;26892:12:33;;-1:-1:-1;27010:56:33;;-1:-1:-1;26915:8:33;26892:12;27010:38;:56::i;:::-;26996:11;;;:70;27296:10;;;;;:16;;;;27243:21;;;;;27219:10;;;;:21;27182:19;;-1:-1:-1;;;;;27288:25:33;;;;27219:45;;;:::i;:::-;-1:-1:-1;;;;;27211:54:33;27204:110;;;;:::i;:::-;27378:10;;;;:16;27182:132;;-1:-1:-1;2192:16:33;27378:39;;;;27374:259;;27497:4;:10;;;:16;;;27465:4;:10;;;:29;;;:48;;;;:::i;:::-;27433:10;;;;-1:-1:-1;;;;;27433:80:33;;;:29;;;;:80;27374:259;;;27606:4;:10;;;:16;;;27575:4;:10;;;:28;;;:47;;;;:::i;:::-;27544:10;;;;-1:-1:-1;;;;;27544:78:33;;;:28;;;;:78;27374:259;27642:5;-1:-1:-1;;;;;27642:25:33;;27668:4;:8;;;27678:28;27695:4;:10;;;27678:16;:28::i;:::-;27642:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27778:10:33;;;;:16;2192;27778:39;;;;27774:123;;27833:53;27850:5;27857:10;27869:4;:10;;;:16;;;27833;:53::i;:::-;27970:10;;;;:16;2192;27970:39;-1:-1:-1;;27970:39:33;27966:185;;28025:56;28049:5;28056:9;28067:13;28068:12;28067:13;:::i;28025:56::-;-1:-1:-1;;;;;28095:19:33;;;28115:9;28126:13;28127:12;28126:13;:::i;:::-;28095:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27966:185;28235:8;;;;;28210:37;;-1:-1:-1;;;28210:37:33;;;;;19307:25:105;;;;28245:1:33;19348:18:105;;;19341:34;-1:-1:-1;;;;;28210:24:33;;;;;19280:18:105;;28210:37:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28302:45:33;;-1:-1:-1;;;28302:45:33;;-1:-1:-1;;;;;28302:19:33;;;-1:-1:-1;28302:19:33;;-1:-1:-1;28302:45:33;;28322:10;;28334:12;;28302:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2011:13:42;28358:16:33;;;:70;-1:-1:-1;;28499:11:33;;;;28451:68;;28358:8;;28512:6;28451:37;:68::i;:::-;28438:81;;;;;;28571:7;28535:66;;28560:9;-1:-1:-1;;;;;28535:66:33;28553:5;-1:-1:-1;;;;;28535:66:33;;28580:10;28592:8;28535:66;;;;;;;:::i;:::-;;;;;;;;28643:10;-1:-1:-1;;;;;28616:68:33;28636:5;-1:-1:-1;;;;;28616:68:33;;28655:9;28666:7;28675:8;28616:68;;;;;;;;:::i;:::-;;;;;;;;28735:7;28699:69;;28724:9;-1:-1:-1;;;;;28699:69:33;28717:5;-1:-1:-1;;;;;28699:69:33;;28744:10;28756:1;28759:8;28699:69;;;;;;;;:::i;:::-;;;;;;;;28815:10;-1:-1:-1;;;;;28783:76:33;28808:5;-1:-1:-1;;;;;28783:76:33;;28827:9;28838:7;28847:1;28850:8;28783:76;;;;;;;;;:::i;632:191:30:-;720:10;-1:-1:-1;;;;;734:5:30;720:19;;712:57;;;;-1:-1:-1;;;712:57:30;;21278:2:105;712:57:30;;;21260:21:105;21317:2;21297:18;;;21290:30;21356:27;21336:18;;;21329:55;21401:18;;712:57:30;21076:349:105;712:57:30;786:30;805:10;786:18;:30::i;:::-;632:191;:::o;400:122:93:-;447:19;489:26;751:20:95;745:27;;618:170;489:26:93;482:33;;400:122;:::o;481:145:30:-;552:7;598:4;-1:-1:-1;;;;;582:35:30;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22573:864:33:-;22776:10;22800:13;22827;22854:27;22906:11;22927;22948:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;22948:22:33;22980:29;;:::i;:::-;23124:58;23137:5;23144:9;23155:10;23167:7;23176:5;23124:12;:58::i;:::-;23020:162;;-1:-1:-1;23020:162:33;;-1:-1:-1;23020:162:33;;-1:-1:-1;23020:162:33;-1:-1:-1;23020:162:33;-1:-1:-1;23020:162:33;23193:39;;23213:5;23220;23227:1;23230;23205:27;;;;;;;;;;;;;;23193:39;23253:11;;23305;;;;2192:16;23253:34;;;;;;;;-1:-1:-1;23305:11:33;-1:-1:-1;23253:34:33;23348:82;;23418:5;:11;;;-1:-1:-1;;;;;23410:20:33;23390:5;:16;;;23371:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;23363:44:33;:67;;;;:::i;:::-;23348:82;;;23359:1;23348:82;23326:104;;22896:541;;;;22573:864;;;;;;;;;;:::o;15099:2621::-;15288:19;15323:38;;:::i;:::-;15371:47;;:::i;:::-;15428:18;15456:21;15501:34;15538:49;15576:5;15583:3;;15538:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15538:37:33;;-1:-1:-1;;;15538:49:33:i;:::-;15501:86;;15614:7;:17;;;15601:30;;15656:7;:16;;;15645:27;;15487:196;15812:57;15825:5;15832:9;15843:10;15855:7;15864:4;15812:12;:57::i;:::-;15789:10;;;15693:176;;;15751:10;;;15693:176;;;;-1:-1:-1;15729:8:33;;;15693:176;;;;;;;15954:16;2192;15954:39;-1:-1:-1;;15954:39:33;15946:76;;;;-1:-1:-1;;;15946:76:33;;21994:2:105;15946:76:33;;;21976:21:105;22033:2;22013:18;;;22006:30;22072:26;22052:18;;;22045:54;22116:18;;15946:76:33;21792:348:105;15946:76:33;16044:118;16095:5;16114:9;16137:4;:8;;;16044:118;;;;;;;;;;;;:37;:118::i;:::-;16033:129;;16181:3;;16172:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1932:13:42;16195:16:33;;;:71;-1:-1:-1;16172:12:33;;-1:-1:-1;16290:56:33;;-1:-1:-1;16195:8:33;16172:12;16290:38;:56::i;:::-;16276:11;;;:70;16580:10;;;;;:16;;;;16527:21;;;;;16503:10;;;;:21;16466:19;;-1:-1:-1;;;;;16572:25:33;;;;16503:45;;;:::i;:::-;-1:-1:-1;;;;;16495:54:33;16488:110;;;;:::i;:::-;16466:132;;16673:4;:10;;;:16;;;16641:4;:10;;;:29;;;:48;;;;:::i;:::-;16609:10;;;;;-1:-1:-1;;;;;16609:80:33;;;:29;;;;:80;;;;16761:10;;;;;:16;;16730:10;;-1:-1:-1;16730:28:33;;:47;;16761:16;16730:47;:::i;:::-;16699:10;;;;;-1:-1:-1;;;;;16699:78:33;;;:28;;;;:78;;;;16813:8;;16840:10;;-1:-1:-1;;;;;16787:25:33;;;;;16823:28;;:16;:28::i;:::-;16787:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16919:53;16936:5;16943:10;16955:4;:10;;;:16;;;16919;:53::i;:::-;17045:10;;;;;:21;17021:10;;;;;-1:-1:-1;;;;;17021:45:33;;;:21;;;;:45;17119:10;;2192:16;17119:38;;17193:8;;;;17227:10;;-1:-1:-1;;;;;17167:25:33;;;;;17203:35;;:23;:35::i;:::-;17167:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17331:45:33;;-1:-1:-1;;;17331:45:33;;-1:-1:-1;;;;;17331:19:33;;;-1:-1:-1;17331:19:33;;-1:-1:-1;17331:45:33;;17351:10;;17363:12;;17331:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2011:13:42;17387:16:33;;;:70;-1:-1:-1;;17528:11:33;;;;17480:68;;17387:8;;17541:6;17480:37;:68::i;:::-;17467:81;;;;;;17600:7;17564:66;;17589:9;-1:-1:-1;;;;;17564:66:33;17582:5;-1:-1:-1;;;;;17564:66:33;;17609:10;17621:8;17564:66;;;;;;;:::i;:::-;;;;;;;;17672:10;-1:-1:-1;;;;;17645:68:33;17665:5;-1:-1:-1;;;;;17645:68:33;;17684:9;17695:7;17704:8;17645:68;;;;;;;;:::i;:::-;;;;;;;;15313:2407;;;;;15099:2621;;;;;;;:::o;7252:673::-;7433:19;7468:34;7505:49;7543:5;7550:3;;7505:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7505:37:33;;-1:-1:-1;;;7505:49:33:i;:::-;7584:17;;;;7468:86;;-1:-1:-1;7564:17:33;;7651:41;7666:5;7584:17;7684:7;7651:14;:41::i;:::-;7611:81;;;;7724:5;:16;;;-1:-1:-1;;;;;7710:30:33;:10;-1:-1:-1;;;;;7710:30:33;;;7702:60;;;;-1:-1:-1;;;7702:60:33;;22347:2:105;7702:60:33;;;22329:21:105;22386:2;22366:18;;;22359:30;-1:-1:-1;;;22405:18:105;;;22398:47;22462:18;;7702:60:33;22145:341:105;7702:60:33;7773:81;7786:5;7793:9;7804:7;7813:3;7818:5;7825:10;7837:7;:16;;;7773:12;:81::i;:::-;7915:3;;7906:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7906:12:33;;7252:673;-1:-1:-1;;;;;;;;;;;;;7252:673:33:o;6459:715::-;6663:20;6697:21;6734:11;6748:35;6764:9;6775:7;6748:15;:35::i;:::-;6734:49;;6794:10;6806:22;6832:25;6846:5;6853:3;6832:13;:25::i;:::-;6793:64;;;;6875:5;6867:33;;;;-1:-1:-1;;;6867:33:33;;;;;;;:::i;:::-;6911:18;6967:5;:23;;;6940:5;:24;;;:50;;;;:::i;:::-;-1:-1:-1;;;;;6932:59:33;;-1:-1:-1;7001:18:33;7022:33;7023:19;6932:59;7023:6;:19;:::i;7022:33::-;7081:16;;7001:54;;-1:-1:-1;7081:29:33;;7001:54;;7081:29;:::i;:::-;7065:45;-1:-1:-1;7135:32:33;7157:10;-1:-1:-1;;;;;7135:19:33;;:32;:::i;:::-;7120:47;;6724:450;;;;;6459:715;;;;;;;:::o;2968:1763::-;3145:21;3180:15;3209:19;3341:23;3374:24;3429:36;3450:5;3457:7;3429:20;:36::i;:::-;3408:57;;-1:-1:-1;3408:57:33;-1:-1:-1;3480:8:33;3475:1079;3498:7;:14;3494:1;:18;;;3475:1079;;;3533:10;3557:29;;:::i;:::-;3600:11;3644:12;3659:7;3667:1;3659:10;;;;;;;;;;:::i;:::-;;;;;;;3644:25;;3704:39;3725:5;3732:7;3740:1;3732:10;;;;;;;;;;:::i;:::-;;;;;;;3704:20;:39::i;:::-;3687:56;;-1:-1:-1;3687:56:33;-1:-1:-1;3687:56:33;3761:13;;;;:::i;:::-;3814:5;3799:20;;:5;:11;;;:20;;;3792:28;;;;:::i;:::-;-1:-1:-1;;;;;3896:27:33;;;3953:4;3980:7;4009:48;;;;-1:-1:-1;;;4009:48:33;:::i;:::-;4059:1;3896:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3896:165:33;;;;;;;;;;;;:::i;:::-;4062:1;3896:168;;;;;;;;:::i;:::-;;;;;;;3890:174;;3626:453;4111:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:22:33;4168:25;4182:5;4189:3;4168:13;:25::i;:::-;4151:42;;-1:-1:-1;4151:42:33;-1:-1:-1;4151:42:33;4211:13;;;;:::i;:::-;4498:5;:11;;;-1:-1:-1;;;;;4490:20:33;4462:5;:16;;;4443:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;4435:44:33;4428:83;;;;:::i;:::-;4259:270;;:14;:270;:::i;:::-;4242:287;;4093:451;3519:1035;;;3514:3;;;;:::i;:::-;;;3475:1079;;;;4663:36;4684:5;4691:7;4663:20;:36::i;:::-;4653:46;;4723:1;4709:15;;3243:1488;;2968:1763;;;;;;;:::o;28872:2264::-;29074:19;29109:49;29147:5;29154:3;;29109:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29109:37:33;;-1:-1:-1;;;29109:49:33:i;:::-;-1:-1:-1;;;;;;29176:24:33;;29168:56;;;;-1:-1:-1;;;29168:56:33;;;;;;;:::i;:::-;29235:38;;:::i;:::-;29283:47;;:::i;:::-;29460:57;29473:5;29480:9;29491:10;29503:7;29512:4;29460:12;:57::i;:::-;29437:10;;;29341:176;;;29399:10;;;29341:176;;;;-1:-1:-1;29377:8:33;;;29341:176;;;;;;;29572:16;2192;29572:39;;;;29564:72;;;;-1:-1:-1;;;29564:72:33;;26351:2:105;29564:72:33;;;26333:21:105;26390:2;26370:18;;;26363:30;-1:-1:-1;;;26409:18:105;;;26402:50;26469:18;;29564:72:33;26149:344:105;29564:72:33;29647:27;29754:4;:10;;;:16;;;-1:-1:-1;;;;;29746:25:33;29709:4;:10;;;:21;;;29685:4;:10;;;:21;;;:45;;;;:::i;:::-;-1:-1:-1;;;;;29677:54:33;:94;;;;:::i;:::-;29647:124;;29793:118;29844:5;29863:9;29886:4;:8;;;29793:118;;;;;;;;;;;;:37;:118::i;:::-;29782:129;;29930:3;;29921:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29921:12:33;;-1:-1:-1;;29948:23:33;;;-1:-1:-1;29944:1186:33;;-1:-1:-1;29944:1186:33;1776:13:42;29987:16:33;;;:68;30083:56;29987:8;30132:6;30083:38;:56::i;:::-;30069:11;;;:70;30197:71;30221:5;30228:9;30239:28;30247:19;30239:28;:::i;30197:71::-;-1:-1:-1;;;;;30282:19:33;;;30302:9;30313:28;30321:19;30313:28;:::i;:::-;30282:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;30453:10:33;;;;;:21;30429:10;;;;;-1:-1:-1;;;;;30429:45:33;;;:21;;;;:45;30514:8;;;;30548:10;;-1:-1:-1;;;;;30488:25:33;;;;;30524:35;;:23;:35::i;:::-;30488:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30574:60:33;;-1:-1:-1;;;30574:60:33;;-1:-1:-1;;;;;30574:19:33;;;-1:-1:-1;30574:19:33;;-1:-1:-1;30574:60:33;;30594:10;;30613:19;;30574:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30697:7;30654:84;;30686:9;-1:-1:-1;;;;;30654:84:33;30679:5;-1:-1:-1;;;;;30654:84:33;;30706:10;30718:19;30654:84;;;;;;;:::i;:::-;;;;;;;;30757:91;;;-1:-1:-1;;;;;26995:32:105;;;26977:51;;27076:10;27064:23;;27059:2;27044:18;;27037:51;27104:18;;;27097:34;;;30757:91:33;;;;;;;;;26965:2:105;26950:18;30757:91:33;;;;;;;1852:13:42;30863:16:33;;;:67;31005:11;;;;30957:68;;30863:8;;31018:6;30957:37;:68::i;:::-;30944:81;-1:-1:-1;29944:1186:33;;-1:-1:-1;29944:1186:33;;31116:3;;31107:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31107:12:33;;-1:-1:-1;;;;29944:1186:33;29099:2037;;;28872:2264;;;;;;;;:::o;11365:3649::-;11553:19;11588:38;;:::i;:::-;11636:47;;:::i;:::-;11693:18;11721:21;11766:34;11803:49;11841:5;11848:3;;11803:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11803:37:33;;-1:-1:-1;;;11803:49:33:i;:::-;11766:86;;11879:7;:17;;;11866:30;;11921:7;:16;;;11910:27;;11752:196;12100:58;12113:5;12120:9;12131:10;12143:7;12152:5;12100:12;:58::i;:::-;12077:10;;;11958:200;;;;12040:23;;;11958:200;12016:10;;;11958:200;;;;11994:8;;;11958:200;;;;;;;12169:166;;12260:10;;;;:16;2192;12260:39;;;;12252:72;;;;-1:-1:-1;;;12252:72:33;;26351:2:105;12252:72:33;;;26333:21:105;26390:2;26370:18;;;26363:30;-1:-1:-1;;;26409:18:105;;;26402:50;26469:18;;12252:72:33;26149:344:105;12252:72:33;12354:3;;12345:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12471:8:33;;;;;12378:118;;;;;;;;;;;12345:12;;-1:-1:-1;12378:118:33;;12429:5;;-1:-1:-1;12448:9:33;;-1:-1:-1;12471:8:33;;-1:-1:-1;12378:37:33;:118::i;:::-;12367:129;;12512:4;:23;;;12507:2228;;1623:13:42;12551:16:33;;;:68;12647:56;12551:8;12696:6;12647:38;:56::i;:::-;12633:11;;;;:70;;;;12731:207;;;;;;;;-1:-1:-1;12731:207:33;;;-1:-1:-1;;;;;12731:207:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;12902:10:33;:21;-1:-1:-1;;;;;12731:207:33;;;;;;;;;;;;;12718:10;;:220;13071:8;;13029:51;;13052:5;;13059:10;;13029:22;:51::i;:::-;13010:10;;;;;:70;;;;;;;13116:8;;;;13150:10;;-1:-1:-1;;;;;13094:21:33;;;;;13126:35;;:23;:35::i;:::-;13094:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1699:13:42;13177:16:33;;;:67;-1:-1:-1;;13319:11:33;;;;13271:68;;13177:8;;13332:6;13271:37;:68::i;:::-;13258:81;-1:-1:-1;12507:2228:33;;-1:-1:-1;12507:2228:33;;1776:13:42;13370:16:33;;;:68;13466:56;13370:8;13515:6;13466:38;:56::i;:::-;13452:11;;;:70;13765:10;;;;;:16;;;;13708:21;;;;;13684:10;;;;:21;13650:16;;-1:-1:-1;;;;;13757:25:33;;;;13684:45;;;:::i;:::-;-1:-1:-1;;;;;13676:54:33;13669:114;;;;:::i;:::-;13650:133;;13900:4;:10;;;:16;;;13867:4;:10;;;:29;;:49;;;;;;;:::i;:::-;-1:-1:-1;;;;;13867:49:33;;;-1:-1:-1;13962:10:33;;;;;:16;;13930:10;;;;:28;;:48;;;;13962:16;;13930:48;:::i;:::-;-1:-1:-1;;;;;13930:48:33;;;-1:-1:-1;14018:8:33;;14045:10;;;;-1:-1:-1;;;;;13992:25:33;;;;;14028:28;;:16;:28::i;:::-;13992:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14071:56;14095:5;14102:9;14114:12;14113:13;;;:::i;14071:56::-;-1:-1:-1;;;;;14141:19:33;;;14161:9;14172:13;14173:12;14172:13;:::i;:::-;14141:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14273:45:33;;-1:-1:-1;;;14273:45:33;;-1:-1:-1;;;;;14273:19:33;;;-1:-1:-1;14273:19:33;;-1:-1:-1;14273:45:33;;14293:10;;14305:12;;14273:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14356:10:33;;;;;:21;14332:10;;;;-1:-1:-1;;;;;14332:45:33;;;:21;;:45;-1:-1:-1;14452:8:33;;14410:51;;14433:5;;14440:10;;14410:22;:51::i;:::-;14391:10;;;;;:70;;;;;;;14501:8;;;;14535:10;;-1:-1:-1;;;;;14475:25:33;;;;;14511:35;;:23;:35::i;:::-;14475:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1852:13:42;14562:16:33;;;:67;-1:-1:-1;;14704:11:33;;;;14656:68;;14562:8;;14717:6;14656:37;:68::i;:::-;14643:81;-1:-1:-1;;;12507:2228:33;14893:7;14859:64;;14882:9;-1:-1:-1;;;;;14859:64:33;14875:5;-1:-1:-1;;;;;14859:64:33;;14902:10;14914:8;14859:64;;;;;;;:::i;:::-;;;;;;;;14966:10;-1:-1:-1;;;;;14938:69:33;14959:5;-1:-1:-1;;;;;14938:69:33;;14978:9;14989:7;14998:8;14938:69;;;;;;;;:::i;:::-;;;;;;;;11578:3436;;;;11365:3649;;;;;;;:::o;24545:1018::-;24698:27;24739:24;24777:26;24819:23;24852:24;24907:39;24928:5;24935:10;24907:20;:39::i;:::-;24886:60;;-1:-1:-1;24886:60:33;-1:-1:-1;24956:10:33;24976:29;;:::i;:::-;25042:7;:14;-1:-1:-1;;;;;25028:29:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25028:29:33;;25015:42;;25091:7;:14;-1:-1:-1;;;;;25078:28:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25078:28:33;;25067:39;;25142:7;:14;-1:-1:-1;;;;;25128:29:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25128:29:33;;25116:41;;25172:8;25167:390;25190:7;:14;25186:1;:18;;;25167:390;;;25225:12;25240:7;25248:1;25240:10;;;;;;;;;;:::i;:::-;;;;;;;25225:25;;25264:11;25278:7;25286:1;25278:10;;;;;;;;;;:::i;:::-;;;;;;;25264:24;;25319:32;25340:5;25347:3;25319:20;:32::i;:::-;25302:49;;-1:-1:-1;25302:49:33;-1:-1:-1;25302:49:33;25365:13;;;;:::i;:::-;25414:5;25399:20;;:5;:11;;;:20;;;25392:28;;;;:::i;:::-;25450:5;:15;;;25434:10;25445:1;25434:13;;;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;25434:31:33;;;-1:-1:-1;;;;;25434:31:33;;;;;25493:5;:13;;;25479:8;25488:1;25479:11;;;;;;;;;;:::i;:::-;;;;;;:27;;;;;;;;;;;25535:5;:11;;;25520:9;25530:1;25520:12;;;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;25520:26:33;;;-1:-1:-1;;;;;25520:26:33;;;;;25211:346;;25206:3;;;;:::i;:::-;;;25167:390;;;;24809:754;;;;24545:1018;;;;;:::o;8002:818::-;8178:19;8213:34;8250:49;8288:5;8295:3;;8250:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8250:37:33;;-1:-1:-1;;;8250:49:33:i;:::-;8329:17;;;;8213:86;;-1:-1:-1;8309:17:33;;8396:41;8411:5;8329:17;8429:7;8396:14;:41::i;:::-;8356:81;;;;8447:18;8503:5;:23;;;8476:5;:24;;;:50;;;;:::i;:::-;-1:-1:-1;;;;;8468:59:33;;-1:-1:-1;8542:14:33;;8538:213;;8572:18;8593:33;8594:19;8603:10;8594:6;:19;:::i;8593:33::-;8572:54;;8640:100;8653:5;8660:9;8671:7;8680:3;8685:5;8711:10;8692:5;:16;;;:29;;;;:::i;:::-;8723:7;:16;;;8640:12;:100::i;:::-;8558:193;8538:213;8810:3;;8801:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8801:12:33;;8002:818;-1:-1:-1;;;;;;;;;;;;;;8002:818:33:o;23523:938::-;23674:17;23704:14;23731:13;23757;23783:27;23834:10;23854:11;23875:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;23875:22:33;23907:29;;:::i;:::-;23964:40;23985:5;23992:11;23964:20;:40::i;:::-;23947:57;;-1:-1:-1;23947:57:33;-1:-1:-1;23947:57:33;24014:32;;;;-1:-1:-1;;;24014:32:33;;27344:2:105;24014:32:33;;;27326:21:105;27383:2;27363:18;;;27356:30;-1:-1:-1;;;27402:18:105;;;27395:44;27456:18;;24014:32:33;27142:338:105;24014:32:33;24069:5;:15;;;24057:27;;24104:5;:13;;;24094:23;;24133:35;24149:9;24160:7;24133:15;:35::i;:::-;24127:41;;24195:25;24209:5;24216:3;24195:13;:25::i;:::-;24178:42;;-1:-1:-1;24178:42:33;-1:-1:-1;24178:42:33;24230:13;;;;:::i;:::-;24265:11;;24317;;;;2192:16;24265:34;;;;;;;;-1:-1:-1;24317:11:33;-1:-1:-1;24265:34:33;24360:94;;24442:5;:11;;;-1:-1:-1;;;;;24434:20:33;24414:5;:16;;;24395:5;:16;;;:35;;;;:::i;:::-;-1:-1:-1;;;;;24387:44:33;:67;;;;:::i;:::-;24360:94;;;24371:1;24360:94;24338:116;;23824:637;;;;23523:938;;;;;;;;:::o;4994:667::-;5147:19;5182:34;5219:49;5257:5;5264:3;;5219:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5219:37:33;;-1:-1:-1;;;5219:49:33:i;:::-;5298:17;;;;5182:86;;-1:-1:-1;5278:17:33;5339:35;5298:17;5366:7;5339:15;:35::i;:::-;5325:49;;5393:25;5407:5;5414:3;5393:13;:25::i;:::-;5392:26;5384:58;;;;-1:-1:-1;;;5384:58:33;;27687:2:105;5384:58:33;;;27669:21:105;27726:2;27706:18;;;27699:30;-1:-1:-1;;;27745:18:105;;;27738:49;27804:18;;5384:58:33;27485:343:105;5384:58:33;5453:5;-1:-1:-1;;;;;5453:21:33;;5475:3;5480:36;5497:18;;;;;;;;5507:1;-1:-1:-1;;;;;5497:18:33;;;;;5510:1;-1:-1:-1;;;;;5497:18:33;;;;;5513:1;-1:-1:-1;;;;;5497:18:33;;;;5480:16;:36::i;:::-;5453:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5564:7;5533:57;;5553:9;-1:-1:-1;;;;;5533:57:33;5546:5;-1:-1:-1;;;;;5533:57:33;;5573:7;:16;;;5533:57;;;;;;:::i;:::-;;;;;;;;5651:3;;5642:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5642:12:33;;4994:667;-1:-1:-1;;;;;;;;;;;4994:667:33:o;1013:347:31:-;1124:26;;:::i;:::-;1193:10;-1:-1:-1;;;;;1174:29:31;:5;-1:-1:-1;;;;;1174:13:31;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1174:29:31;;1166:59;;;;-1:-1:-1;;;1166:59:31;;28470:2:105;1166:59:31;;;28452:21:105;28509:2;28489:18;;;28482:30;-1:-1:-1;;;28528:18:105;;;28521:47;28585:18;;1166:59:31;28268:341:105;1166:59:31;1243:39;;-1:-1:-1;;;1243:39:31;;1255:10;;1243:34;;:39;;1278:3;;1243:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1235:63;;;;-1:-1:-1;;;1235:63:31;;29192:2:105;1235:63:31;;;29174:21:105;29231:2;29211:18;;;29204:30;-1:-1:-1;;;29250:18:105;;;29243:41;29301:18;;1235:63:31;28990:335:105;1235:63:31;1315:38;;-1:-1:-1;;;1315:38:31;;1327:10;;1315:33;;:38;;1349:3;;1315:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1315:38:31;;;;;;;;;;;;:::i;:::-;1308:45;1013:347;-1:-1:-1;;;1013:347:31:o;31142:950:33:-;-1:-1:-1;;;;;;;;31374:11:33;-1:-1:-1;;;;;;;;;;;;;;;31374:11:33;;31460:23;31497:29;;:::i;:::-;31551:16;31583:35;31599:9;31610:7;31583:15;:35::i;:::-;31577:41;;31634:35;31653:10;31665:3;31634:18;:35::i;:::-;31628:41;;31702:25;31716:5;31723:3;31702:13;:25::i;:::-;31679:48;-1:-1:-1;31679:48:33;-1:-1:-1;31679:48:33;31737:39;;;;-1:-1:-1;;;31737:39:33;;;;;;;:::i;:::-;31816:32;31837:5;31844:3;31816:20;:32::i;:::-;31786:62;;-1:-1:-1;31786:62:33;-1:-1:-1;31858:228:33;;;;31913:18;31905:45;;;;-1:-1:-1;;;31905:45:33;;27344:2:105;31905:45:33;;;27326:21:105;27383:2;27363:18;;;27356:30;-1:-1:-1;;;27402:18:105;;;27395:44;27456:18;;31905:45:33;27142:338:105;31905:45:33;32019:9;-1:-1:-1;;;;;32000:28:33;:5;:15;;;-1:-1:-1;;;;;32000:28:33;;31993:36;;;;:::i;:::-;32067:7;32050:24;;:5;:13;;;:24;;;32043:32;;;;:::i;:::-;31541:551;31142:950;;;;;;;;;;;:::o;1806:388:31:-;2001:28;;:::i;:::-;-1:-1:-1;;;;;2045:20:31;;;;;2075:24;;;;:14;;;:24;2109:18;;;:32;2151:20;;;:36;;;;2045:6;1806:388::o;2200:1318::-;2527:14;;;;2478:65;;-1:-1:-1;;;2478:65:31;;-1:-1:-1;;;;;4849:32:105;;;2478:65:31;;;4831:51:105;2334:19:31;;-1:-1:-1;;;;;;2490:10:31;;2478:38;;4804:18:105;;2478:65:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2443:100;;-1:-1:-1;2443:100:31;-1:-1:-1;2443:100:31;-1:-1:-1;2443:100:31;2557:23;;;;;2572:8;2571:9;2557:23;2553:959;;;2596:19;2618:31;2637:3;2642:6;2618:18;:31::i;:::-;2596:53;;2679:6;:14;;;2668:8;:25;2698:1;2667:32;2663:688;;2719:21;2787:36;2808:6;:14;;;2787:20;:36::i;:::-;2845:12;;2935:18;;;;;2975:20;;;;3017:12;;2845;3017;;;;;;;;2743:323;;2845:12;2887:4;;2935:18;2975:20;2743:323;;;;:::i;:::-;;;;-1:-1:-1;;2743:323:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;2743:323:31;-1:-1:-1;;;;;;2743:323:31;;;;;;;;;;3170:14;;;;3237;;;;3093:243;;-1:-1:-1;;;3093:243:31;;2743:323;;-1:-1:-1;3105:10:31;;3093:45;;:243;;3170:14;2743:323;;1932:13:42;3237:70:31;;;;;3329:6;;3093:243;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3093:243:31;;;;;;;;;;;;:::i;:::-;3084:252;;2701:650;2663:688;3476:25;3494:3;3499:1;3476:17;:25::i;:::-;;2582:930;2553:959;2359:1159;;;2200:1318;;;;:::o;1618:192:27:-;1675:7;-1:-1:-1;;;;;1702:26:27;;;1694:78;;;;-1:-1:-1;;;1694:78:27;;33902:2:105;1694:78:27;;;33884:21:105;33941:2;33921:18;;;33914:30;33980:34;33960:18;;;33953:62;-1:-1:-1;;;34031:18:105;;;34024:37;34078:19;;1694:78:27;33700:403:105;1694:78:27;-1:-1:-1;1797:5:27;1618:192::o;33015:435:33:-;33157:16;;;33171:1;33157:16;;;33117:21;33157:16;;;;;33117:21;33157:16;;;;;;;;;;-1:-1:-1;33157:16:33;33150:23;;33274:5;:16;;;-1:-1:-1;;;;;33266:25:33;-1:-1:-1;;;33214:77:33;33193:108;;33183:4;33188:1;33183:7;;;;;;;;:::i;:::-;;;;;;:118;;;;;33429:3;33401:5;:23;;;-1:-1:-1;;;;;33393:32:33;:39;;33351:5;:24;;;-1:-1:-1;;;;;33343:33:33;33342:91;33321:122;;33311:4;33316:1;33311:7;;;;;;;;:::i;:::-;;;;;;:132;;;;;33015:435;;;:::o;35765:479::-;35925:16;;;35939:1;35925:16;;;35881:21;35925:16;;;;;35881:21;35925:16;;;;;;;;;;-1:-1:-1;35925:16:33;35918:23;;36095:5;:11;;;36087:20;;36069:2;36051:5;:13;;;36043:22;;:28;;36021:4;35999:5;:15;;;-1:-1:-1;;;;;35983:33:33;:43;;35982:90;:125;35961:156;;35951:4;35956:1;35951:7;;;;;;;;:::i;:::-;;;;;;:166;;;;;36223:3;36207:5;:11;;;-1:-1:-1;;;;;36199:20:33;:27;;36166:5;:16;;;-1:-1:-1;;;;;36158:25:33;:69;36137:100;;36127:4;36132:1;36127:7;;;;;;;;:::i;34940:553::-;35094:5;35103:1;35094:10;35090:23;;34940:553;;;:::o;35090:23::-;35146:139;;-1:-1:-1;;;35146:139:33;;35122:21;;-1:-1:-1;;;;;35146:27:33;;;;;:139;;35195:4;;35214:9;;1779:7;;35283:1;;35146:139;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35146:139:33;;;;;;;;;;;;:::i;:::-;35122:163;;35351:5;35321:27;35329:4;35334:1;35329:7;;;;;;;;:::i;:::-;;;;;;;35321:16;;:25;:27::i;:::-;:35;;;;:::i;:::-;35305:53;;35295:4;35300:1;35295:7;;;;;;;;:::i;:::-;;;;;;;;;;:63;35368:118;;-1:-1:-1;;;35368:118:33;;-1:-1:-1;;;;;35368:30:33;;;;;:118;;35412:9;;1779:7;;35481:4;;35368:118;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35080:413;34940:553;;;:::o;3524:1858:31:-;3699:37;;:::i;:::-;3931:14;;;;3882:65;;-1:-1:-1;;;3882:65:31;;-1:-1:-1;;;;;4849:32:105;;;3882:65:31;;;4831:51:105;3738:19:31;;-1:-1:-1;;;;;;3894:10:31;;3882:38;;4804:18:105;;3882:65:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3967:3;;-1:-1:-1;3847:100:31;;-1:-1:-1;3847:100:31;-1:-1:-1;3847:100:31;-1:-1:-1;3847:100:31;3984:23;;;;;3999:8;3998:9;3984:23;3980:1396;;;4032:34;4051:6;4059;4032:18;:34::i;:::-;4023:43;;4096:6;:14;;;4085:8;:25;4115:1;4084:32;4080:1100;;4136:21;4204:36;4225:6;:14;;;4204:20;:36::i;:::-;4262:12;;4352:18;;;;;4392:20;;;;4462:12;;4262;4462;;;;;;;;4160:351;;4262:12;4304:4;;4352:18;4392:20;4434:6;;4160:351;;;;:::i;:::-;;;;-1:-1:-1;;4160:351:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;4160:351:31;-1:-1:-1;;;;;;4160:351:31;;;;;;;;;;4614:14;;;;4681;;;;4538:241;;-1:-1:-1;;;4538:241:31;;4160:351;;-1:-1:-1;4550:10:31;;4538:44;;:241;;4614:14;4160:351;;2011:13:42;4681:69:31;;;;;4772:6;;4538:241;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4538:241:31;;;;;;;;;;;;:::i;:::-;4811:41;;-1:-1:-1;;;4811:41:31;;4529:250;;-1:-1:-1;4823:10:31;;4811:33;;:41;;4529:250;;4811:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4811:41:31;;;;;;;;;;;;:::i;:::-;4798:54;;4997:167;5001:1;5004:159;5029:37;:6;:26;;;:35;:37::i;:::-;5088:74;5092:40;:10;:29;;;:38;:40::i;:::-;5134:10;:27;;;5088:3;:74::i;:::-;5004:3;:159::i;:::-;4997:3;:167::i;:::-;4967:27;;;:197;-1:-1:-1;4080:1100:31;5314:51;5332:3;5337:10;:27;;;5314:17;:51::i;:::-;5305:60;;3980:1396;3763:1619;;;3524:1858;;;;;;:::o;32283:221:33:-;32447:49;;-1:-1:-1;;;32447:49:33;;;35639:24:105;-1:-1:-1;;35700:2:105;35696:15;;;35692:53;35679:11;;;35672:74;-1:-1:-1;;;;;;35802:3:105;35780:16;;;35776:43;35762:12;;;35755:65;32403:11:33;;35836:12:105;;32447:49:33;;;;;;;;;;;;;32437:60;;;;;;32430:67;;32283:221;;;;:::o;33747:731::-;-1:-1:-1;;;;;;;;33867:10:33;-1:-1:-1;;;;;;;;;;;;;;;33942:45:33;;-1:-1:-1;;;33942:45:33;;33973:4;33942:45;;;36069:51:105;36136:18;;;36129:34;;;33985:1:33;36179:18:105;;;36172:34;33917:22:33;;-1:-1:-1;;;;;33942:22:33;;;;;36042:18:105;;33942:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33942:45:33;;;;;;;;;;;;:::i;:::-;33917:70;;33997:9;34017:5;34023:1;34017:8;;;;;;;;:::i;:::-;;;;;;;34009:17;;33997:29;;34036:9;34056:5;34062:1;34056:8;;;;;;;;:::i;:::-;;;;;;;34048:17;;34036:29;;34087:1;34083;:5;34075:13;;34102:5;34098:374;;;-1:-1:-1;;;;;34324:29:33;;;;;34367:37;;:24;;;:37;34457:3;34452:8;;;34418:23;;;:43;34098:374;33907:571;;;33747:731;;;;;:::o;38092:293::-;38236:142;;-1:-1:-1;;;38236:142:33;;-1:-1:-1;;;;;36536:15:105;;;38236:142:33;;;36518:34:105;36588:15;;36568:18;;;36561:43;1644:1:33;36620:18:105;;;36613:34;36695:10;36683:23;;36663:18;;;36656:51;38236:18:33;;:28;;36452:19:105;;38236:142:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38092:293;;;:::o;1099:576:93:-;1267:1;1229:26;751:20:95;745:27;;618:170;1229:26:93;-1:-1:-1;;;;;1229:40:93;;1221:82;;;;-1:-1:-1;;;1221:82:93;;36920:2:105;1221:82:93;;;36902:21:105;36959:2;36939:18;;;36932:30;36998:31;36978:18;;;36971:59;37047:18;;1221:82:93;36718:353:105;1221:82:93;1367:10;-1:-1:-1;;;;;1353:39:93;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1334:15;:13;:15::i;:::-;:60;1313:142;;;;-1:-1:-1;;;1313:142:93;;37278:2:105;1313:142:93;;;37260:21:105;37317:2;37297:18;;;37290:30;37356:34;37336:18;;;37329:62;-1:-1:-1;;;37407:18:105;;;37400:33;37450:19;;1313:142:93;37076:399:105;1313:142:93;-1:-1:-1;;;;;1486:27:93;;1494:4;1486:27;1465:99;;;;-1:-1:-1;;;1465:99:93;;37682:2:105;1465:99:93;;;37664:21:105;37721:2;37701:18;;;37694:30;37760:27;37740:18;;;37733:55;37805:18;;1465:99:93;37480:349:105;1465:99:93;1574:39;1602:10;988:20:95;964:87;839:228;1574:39:93;1628:40;1640:15;:13;:15::i;:::-;1628:40;;;38008:25:105;;;-1:-1:-1;;;;;38069:32:105;;38064:2;38049:18;;38042:60;37981:18;1628:40:93;;;;;;;1099:576;:::o;10353:394:33:-;-1:-1:-1;;;;;;;;10512:11:33;-1:-1:-1;;;;;;;;;;;;;;;10584:10:33;10610:35;10626:9;10637:7;10610:15;:35::i;:::-;10604:41;;10672:25;10686:5;10693:3;10672:13;:25::i;:::-;10655:42;-1:-1:-1;10655:42:33;-1:-1:-1;10655:42:33;10707:33;;;;-1:-1:-1;;;10707:33:33;;;;;;;:::i;:::-;10574:173;10353:394;;;;;;:::o;8826:1521::-;9203:5;-1:-1:-1;;;;;9203:19:33;;9223:9;9430:5;:24;;;-1:-1:-1;;;;;9422:33:33;9393:5;:16;;;9377:13;:32;;;;:::i;:::-;-1:-1:-1;;;;;9369:41:33;9361:50;;;:::i;:::-;9360:96;;;;:::i;:::-;9203:254;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9520:261;9544:5;9551:9;9755:5;:23;;;-1:-1:-1;;;;;9747:32:33;9719:5;:16;;;9703:13;:32;;;;:::i;:::-;-1:-1:-1;;;;;9695:41:33;9688:92;;;;:::i;9520:261::-;9860:16;;-1:-1:-1;;;;;9886:32:33;;;;-1:-1:-1;;;;;9928:25:33;;;9954:3;9959:23;9860:5;9959:16;:23::i;:::-;9928:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10067:7;9999:227;;10044:9;-1:-1:-1;;;;;9999:227:33;10025:5;-1:-1:-1;;;;;9999:227:33;;10088:13;10115;10142:5;:23;;;10179:5;:24;;;10217:8;9999:227;;;;;;;;;;:::i;:::-;;;;;;;;10280:37;;-1:-1:-1;;;10280:37:33;;-1:-1:-1;;;;;4849:32:105;;;10280:37:33;;;4831:51:105;10280:26:33;;;;;4804:18:105;;10280:37:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10279:38;10271:69;;;;-1:-1:-1;;;10271:69:33;;38913:2:105;10271:69:33;;;38895:21:105;38952:2;38932:18;;;38925:30;-1:-1:-1;;;38971:18:105;;;38964:48;39029:18;;10271:69:33;38711:342:105;38391:586:33;38536:23;38573:24;38634:18;:27;38675:5;38694:10;1644:1;-1:-1:-1;;;38634:176:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38634:176:33;;;;;;;;;;;;:::i;:::-;38613:197;;-1:-1:-1;38613:197:33;-1:-1:-1;38854:6:33;38849:122;38870:7;:14;38866:1;:18;38849:122;;;38918:42;38937:10;38949:7;38957:1;38949:10;;;;;;;;:::i;:::-;;;;;;;38918:18;:42::i;:::-;38905:7;38913:1;38905:10;;;;;;;;:::i;:::-;;;;;;;;;;:55;38886:3;;;:::i;:::-;;;38849:122;;;;38391:586;;;;;:::o;36250:865::-;36377:10;36389:29;;:::i;:::-;36459:45;;-1:-1:-1;;;36459:45:33;;36490:4;36459:45;;;36069:51:105;36136:18;;;36129:34;;;36502:1:33;36179:18:105;;;36172:34;36434:22:33;;-1:-1:-1;;;;;36459:22:33;;;;;36042:18:105;;36459:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36459:45:33;;;;;;;;;;;;:::i;:::-;36434:70;;36514:9;36534:5;36540:1;36534:8;;;;;;;;:::i;:::-;;;;;;;36526:17;;36514:29;;36553:9;36573:5;36579:1;36573:8;;;;;;;;:::i;:::-;;;;;;;36565:17;;36553:29;;36604:1;36600;:5;36592:13;;36619:5;36615:494;;;36680:4;36674:11;;;36640:15;;;;:47;;;;36725:7;;;36736:16;36724:28;;;36701:13;;;:52;36788:20;;36767:42;;-1:-1:-1;;;;;37024:29:33;;:16;;;:29;37094:3;37089:8;;;37067:11;;;:31;36424:691;;;36250:865;;;;;:::o;34575:359::-;34708:7;34731:21;34755:5;-1:-1:-1;;;;;34755:27:33;;34804:4;34823:9;1779:7;34892:1;34755:139;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34755:139:33;;;;;;;;;;;;:::i;:::-;34731:163;;34919:4;34924:1;34919:7;;;;;;;;:::i;:::-;;;;;;;34911:16;;34904:23;;;34575:359;;;;:::o;37687:399::-;37874:205;;-1:-1:-1;;;37874:205:33;;-1:-1:-1;;;;;41245:15:105;;;37874:205:33;;;41227:34:105;41297:15;;41277:18;;;41270:43;37839:12:33;41329:18:105;;;41322:34;;;-1:-1:-1;;;41372:18:105;;;41365:34;41415:19;;;41408:35;;;37839:12:33;37874:18;;:39;;41161:19:105;;37874:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37867:212;37687:399;-1:-1:-1;;;;37687:399:33:o;33456:285::-;33627:45;;-1:-1:-1;;;33627:45:33;;33658:4;33627:45;;;36069:51:105;36136:18;;;36129:34;;;33670:1:33;36179:18:105;;;36172:34;33576:10:33;;;;-1:-1:-1;;;;;33627:22:33;;;;;36042:18:105;;33627:45:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33627:45:33;;;;;;;;;;;;:::i;:::-;33602:70;;33682:9;33702:5;33708:1;33702:8;;;;;;;;:::i;:::-;;;;;;;;;;;33729:5;;;33456:285;-1:-1:-1;;;;;33456:285:33:o;32510:222::-;32675:49;;;-1:-1:-1;;;32675:49:33;;;41966:27:105;42031:2;42027:15;;;-1:-1:-1;;42023:53:105;42009:12;;;42002:75;42093:12;;;42086:28;;;-1:-1:-1;;42130:12:105;32675:49:33;41708:440:105;6392:493:31;6759:14;;;;6788:26;;;;6828:23;;;;6865:12;;6679:199;;-1:-1:-1;;;6679:199:31;;6523:19;;6691:10;;6679:39;;:199;;6732:3;;6679:199;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6679:199:31;;;;;;;;;;;;:::i;5388:998::-;5473:15;1623:13:42;5508:7:31;:60;5504:876;;-1:-1:-1;;;;5591:41:31;5388:998;-1:-1:-1;5388:998:31:o;5504:876::-;1776:13:42;5653:7:31;:60;5649:731;;-1:-1:-1;;;;5736:41:31;5388:998;-1:-1:-1;5388:998:31:o;5649:731::-;1932:13:42;5798:7:31;:63;5794:586;;-1:-1:-1;;;;5884:44:31;5388:998;-1:-1:-1;5388:998:31:o;5794:586::-;1699:13:42;5949:7:31;:59;5945:435;;-1:-1:-1;;;;6031:40:31;5388:998;-1:-1:-1;5388:998:31:o;5945:435::-;1852:13:42;6092:7:31;:59;6088:292;;-1:-1:-1;;;;6174:40:31;5388:998;-1:-1:-1;5388:998:31:o;6088:292::-;-1:-1:-1;;;;6326:43:31;5388:998;-1:-1:-1;5388:998:31:o;6088:292::-;5388:998;;;:::o;6891:287::-;7105:66;;-1:-1:-1;;;7105:66:31;;7021:19;;7117:10;;7105:38;;:66;;7144:3;;7149:21;;7105:66;;;:::i;7518:297:27:-;7574:6;-1:-1:-1;;;;;7699:5:27;:34;;7691:87;;;;-1:-1:-1;;;7691:87:27;;43254:2:105;7691:87:27;;;43236:21:105;43293:2;43273:18;;;43266:30;43332:34;43312:18;;;43305:62;-1:-1:-1;;;43383:18:105;;;43376:38;43431:19;;7691:87:27;43052:404:105;7357:89:31;7413:6;7434:1;7430;:5;:13;;7442:1;7430:13;;;-1:-1:-1;7438:1:31;;7357:89;-1:-1:-1;7357:89:31:o;7549:::-;7605:6;7626:1;7622;:5;:13;;7634:1;7622:13;;;-1:-1:-1;7630:1:31;7549:89;-1:-1:-1;7549:89:31:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:149:105:-;-1:-1:-1;;;;;107:31:105;;97:42;;87:70;;153:1;150;143:12;168:121;253:10;246:5;242:22;235:5;232:33;222:61;;279:1;276;269:12;294:188;362:20;;-1:-1:-1;;;;;411:46:105;;401:57;;391:85;;472:1;469;462:12;487:347;538:8;548:6;602:3;595:4;587:6;583:17;579:27;569:55;;620:1;617;610:12;569:55;-1:-1:-1;643:20:105;;-1:-1:-1;;;;;675:30:105;;672:50;;;718:1;715;708:12;672:50;755:4;747:6;743:17;731:29;;807:3;800:4;791:6;783;779:19;775:30;772:39;769:59;;;824:1;821;814:12;769:59;487:347;;;;;:::o;839:962::-;970:6;978;986;994;1002;1010;1063:3;1051:9;1042:7;1038:23;1034:33;1031:53;;;1080:1;1077;1070:12;1031:53;1119:9;1106:23;1138:49;1181:5;1138:49;:::i;:::-;1206:5;-1:-1:-1;1263:2:105;1248:18;;1235:32;1276;1235;1276;:::i;:::-;1327:7;-1:-1:-1;1386:2:105;1371:18;;1358:32;1399:51;1358:32;1399:51;:::i;:::-;1469:7;-1:-1:-1;1495:38:105;1529:2;1514:18;;1495:38;:::i;:::-;1485:48;;1584:3;1573:9;1569:19;1556:33;-1:-1:-1;;;;;1604:6:105;1601:30;1598:50;;;1644:1;1641;1634:12;1598:50;1683:58;1733:7;1724:6;1713:9;1709:22;1683:58;:::i;:::-;839:962;;;;-1:-1:-1;839:962:105;;-1:-1:-1;839:962:105;;1760:8;;839:962;-1:-1:-1;;;839:962:105:o;1806:258::-;1878:1;1888:113;1902:6;1899:1;1896:13;1888:113;;;1978:11;;;1972:18;1959:11;;;1952:39;1924:2;1917:10;1888:113;;;2019:6;2016:1;2013:13;2010:48;;;2054:1;2045:6;2040:3;2036:16;2029:27;2010:48;;1806:258;;;:::o;2069:257::-;2110:3;2148:5;2142:12;2175:6;2170:3;2163:19;2191:63;2247:6;2240:4;2235:3;2231:14;2224:4;2217:5;2213:16;2191:63;:::i;:::-;2308:2;2287:15;-1:-1:-1;;2283:29:105;2274:39;;;;2315:4;2270:50;;2069:257;-1:-1:-1;;2069:257:105:o;2331:217::-;2478:2;2467:9;2460:21;2441:4;2498:44;2538:2;2527:9;2523:18;2515:6;2498:44;:::i;2553:589::-;2655:6;2663;2671;2724:2;2712:9;2703:7;2699:23;2695:32;2692:52;;;2740:1;2737;2730:12;2692:52;2779:9;2766:23;2798:49;2841:5;2798:49;:::i;:::-;2866:5;-1:-1:-1;2923:2:105;2908:18;;2895:32;2936:51;2895:32;2936:51;:::i;:::-;3006:7;-1:-1:-1;3065:2:105;3050:18;;3037:32;3078;3037;3078;:::i;:::-;3129:7;3119:17;;;2553:589;;;;;:::o;3633:1047::-;3764:6;3772;3780;3788;3796;3804;3857:3;3845:9;3836:7;3832:23;3828:33;3825:53;;;3874:1;3871;3864:12;3825:53;3913:9;3900:23;3932:49;3975:5;3932:49;:::i;:::-;4000:5;-1:-1:-1;4057:2:105;4042:18;;4029:32;4070:51;4029:32;4070:51;:::i;:::-;4140:7;-1:-1:-1;4199:2:105;4184:18;;4171:32;4212;4171;4212;:::i;:::-;4263:7;-1:-1:-1;4322:2:105;4307:18;;4294:32;4335:51;4294:32;4335:51;:::i;4893:265::-;4952:6;5005:2;4993:9;4984:7;4980:23;4976:32;4973:52;;;5021:1;5018;5011:12;4973:52;5060:9;5047:23;5079:49;5122:5;5079:49;:::i;5345:749::-;5456:6;5464;5472;5480;5533:3;5521:9;5512:7;5508:23;5504:33;5501:53;;;5550:1;5547;5540:12;5501:53;5589:9;5576:23;5608:49;5651:5;5608:49;:::i;:::-;5676:5;-1:-1:-1;5733:2:105;5718:18;;5705:32;5746:51;5705:32;5746:51;:::i;:::-;5816:7;-1:-1:-1;5875:2:105;5860:18;;5847:32;5888;5847;5888;:::i;:::-;5939:7;-1:-1:-1;5998:2:105;5983:18;;5970:32;6011:51;5970:32;6011:51;:::i;:::-;5345:749;;;;-1:-1:-1;5345:749:105;;-1:-1:-1;;5345:749:105:o;6556:887::-;6678:6;6686;6694;6702;6710;6763:3;6751:9;6742:7;6738:23;6734:33;6731:53;;;6780:1;6777;6770:12;6731:53;6819:9;6806:23;6838:49;6881:5;6838:49;:::i;:::-;6906:5;-1:-1:-1;6963:2:105;6948:18;;6935:32;6976:51;6935:32;6976:51;:::i;:::-;7046:7;-1:-1:-1;7105:2:105;7090:18;;7077:32;7118;7077;7118;:::i;:::-;7169:7;-1:-1:-1;7227:2:105;7212:18;;7199:32;-1:-1:-1;;;;;7243:30:105;;7240:50;;;7286:1;7283;7276:12;7240:50;7325:58;7375:7;7366:6;7355:9;7351:22;7325:58;:::i;:::-;6556:887;;;;-1:-1:-1;6556:887:105;;-1:-1:-1;7402:8:105;;7299:84;6556:887;-1:-1:-1;;;6556:887:105:o;7448:802::-;7570:6;7578;7586;7594;7602;7655:3;7643:9;7634:7;7630:23;7626:33;7623:53;;;7672:1;7669;7662:12;7623:53;7711:9;7698:23;7730:49;7773:5;7730:49;:::i;:::-;7798:5;-1:-1:-1;7855:2:105;7840:18;;7827:32;7868;7827;7868;:::i;:::-;7919:7;-1:-1:-1;7945:38:105;7979:2;7964:18;;7945:38;:::i;8255:658::-;8366:6;8374;8382;8390;8443:3;8431:9;8422:7;8418:23;8414:33;8411:53;;;8460:1;8457;8450:12;8411:53;8499:9;8486:23;8518:49;8561:5;8518:49;:::i;:::-;8586:5;-1:-1:-1;8643:2:105;8628:18;;8615:32;8656:51;8615:32;8656:51;:::i;:::-;8726:7;-1:-1:-1;8785:2:105;8770:18;;8757:32;8798;8757;8798;:::i;:::-;8255:658;;;;-1:-1:-1;8849:7:105;;8903:2;8888:18;8875:32;;-1:-1:-1;;8255:658:105:o;9212:518::-;9315:6;9323;9331;9384:2;9372:9;9363:7;9359:23;9355:32;9352:52;;;9400:1;9397;9390:12;9352:52;9439:9;9426:23;9458:49;9501:5;9458:49;:::i;:::-;9526:5;-1:-1:-1;9583:2:105;9568:18;;9555:32;9596:51;9555:32;9596:51;:::i;:::-;9212:518;;9666:7;;-1:-1:-1;;;9720:2:105;9705:18;;;;9692:32;;9212:518::o;10057:450::-;10151:6;10159;10212:2;10200:9;10191:7;10187:23;10183:32;10180:52;;;10228:1;10225;10218:12;10180:52;10267:9;10254:23;10286:49;10329:5;10286:49;:::i;:::-;10354:5;-1:-1:-1;10411:2:105;10396:18;;10383:32;10424:51;10383:32;10424:51;:::i;:::-;10494:7;10484:17;;;10057:450;;;;;:::o;10512:476::-;10565:3;10603:5;10597:12;10630:6;10625:3;10618:19;10656:4;10685:2;10680:3;10676:12;10669:19;;10722:2;10715:5;10711:14;10743:1;10753:210;10767:6;10764:1;10761:13;10753:210;;;10832:13;;-1:-1:-1;;;;;10828:54:105;10816:67;;10903:12;;;;10938:15;;;;10789:1;10782:9;10753:210;;;-1:-1:-1;10979:3:105;;10512:476;-1:-1:-1;;;;;10512:476:105:o;10993:1368::-;11337:2;11349:21;;;11419:13;;11322:18;;;11441:22;;;11289:4;;11517;;11494:3;11479:19;;;11544:15;;;11289:4;11587:195;11601:6;11598:1;11595:13;11587:195;;;11666:13;;-1:-1:-1;;;;;11662:39:105;11650:52;;11722:12;;;;11757:15;;;;11698:1;11616:9;11587:195;;;-1:-1:-1;;;11818:19:105;;;11798:18;;;11791:47;11888:13;;11910:21;;;11986:15;;;;11949:12;;;12021:1;12031:206;12047:8;12042:3;12039:17;12031:206;;;12120:15;;12137:10;12116:32;12102:47;;12210:17;;;;12171:14;;;;12075:1;12066:11;12031:206;;;12035:3;;12284:9;12277:5;12273:21;12268:2;12257:9;12253:18;12246:49;12312:43;12349:5;12341:6;12312:43;:::i;:::-;12304:51;10993:1368;-1:-1:-1;;;;;;;;10993:1368:105:o;12366:796::-;12488:6;12496;12504;12512;12520;12573:3;12561:9;12552:7;12548:23;12544:33;12541:53;;;12590:1;12587;12580:12;12541:53;12629:9;12616:23;12648:49;12691:5;12648:49;:::i;:::-;12716:5;-1:-1:-1;12773:2:105;12758:18;;12745:32;12786;12745;12786;:::i;:::-;12837:7;-1:-1:-1;12891:2:105;12876:18;;12863:32;;-1:-1:-1;12946:2:105;12931:18;;12918:32;-1:-1:-1;;;;;12962:30:105;;12959:50;;;13005:1;13002;12995:12;13167:359;13261:6;13269;13322:2;13310:9;13301:7;13297:23;13293:32;13290:52;;;13338:1;13335;13328:12;13290:52;13377:9;13364:23;13396:49;13439:5;13396:49;:::i;:::-;13464:5;13516:2;13501:18;;;;13488:32;;-1:-1:-1;;;13167:359:105:o;14091:727::-;14204:6;14212;14220;14228;14281:2;14269:9;14260:7;14256:23;14252:32;14249:52;;;14297:1;14294;14287:12;14249:52;14336:9;14323:23;14355:49;14398:5;14355:49;:::i;:::-;14423:5;-1:-1:-1;14480:2:105;14465:18;;14452:32;14493;14452;14493;:::i;:::-;14544:7;-1:-1:-1;14602:2:105;14587:18;;14574:32;-1:-1:-1;;;;;14618:30:105;;14615:50;;;14661:1;14658;14651:12;14615:50;14700:58;14750:7;14741:6;14730:9;14726:22;14700:58;:::i;:::-;14091:727;;;;-1:-1:-1;14777:8:105;-1:-1:-1;;;;14091:727:105:o;14823:343::-;15025:2;15007:21;;;15064:2;15044:18;;;15037:30;-1:-1:-1;;;15098:2:105;15083:18;;15076:49;15157:2;15142:18;;14823:343::o;15171:127::-;15232:10;15227:3;15223:20;15220:1;15213:31;15263:4;15260:1;15253:15;15287:4;15284:1;15277:15;15303:128;15343:3;15374:1;15370:6;15367:1;15364:13;15361:39;;;15380:18;;:::i;:::-;-1:-1:-1;15416:9:105;;15303:128::o;15436:125::-;15476:4;15504:1;15501;15498:8;15495:34;;;15509:18;;:::i;:::-;-1:-1:-1;15546:9:105;;15436:125::o;15566:435::-;15619:3;15657:5;15651:12;15684:6;15679:3;15672:19;15710:4;15739:2;15734:3;15730:12;15723:19;;15776:2;15769:5;15765:14;15797:1;15807:169;15821:6;15818:1;15815:13;15807:169;;;15882:13;;15870:26;;15916:12;;;;15951:15;;;;15843:1;15836:9;15807:169;;16006:332;16213:6;16202:9;16195:25;16256:2;16251;16240:9;16236:18;16229:30;16176:4;16276:56;16328:2;16317:9;16313:18;16305:6;16276:56;:::i;16343:253::-;16383:3;-1:-1:-1;;;;;16472:2:105;16469:1;16465:10;16502:2;16499:1;16495:10;16533:3;16529:2;16525:12;16520:3;16517:21;16514:47;;;16541:18;;:::i;:::-;16577:13;;16343:253;-1:-1:-1;;;;16343:253:105:o;16601:246::-;16641:4;-1:-1:-1;;;;;16754:10:105;;;;16724;;16776:12;;;16773:38;;;16791:18;;:::i;:::-;16828:13;;16601:246;-1:-1:-1;;;16601:246:105:o;16852:553::-;16891:7;-1:-1:-1;;;;;16961:9:105;;;16989;;;17014:11;;;17033:10;;;17027:17;;17010:35;17007:61;;;17048:18;;:::i;:::-;-1:-1:-1;;;17124:1:105;17117:9;;17142:11;;;17162;;;17155:19;;17138:37;17135:63;;;17178:18;;:::i;:::-;17224:1;17221;17217:9;17207:19;;17271:1;17267:2;17262:11;17259:1;17255:19;17250:2;17246;17242:11;17238:37;17235:63;;;17278:18;;:::i;:::-;17343:1;17339:2;17334:11;17331:1;17327:19;17322:2;17318;17314:11;17310:37;17307:63;;;17350:18;;:::i;:::-;-1:-1:-1;;;17390:9:105;;;;;16852:553;-1:-1:-1;;;16852:553:105:o;17410:136::-;17445:3;-1:-1:-1;;;17466:22:105;;17463:48;;17491:18;;:::i;:::-;-1:-1:-1;17531:1:105;17527:13;;17410:136::o;17551:272::-;-1:-1:-1;;;;;17741:32:105;;;;17723:51;;17805:2;17790:18;;17783:34;17711:2;17696:18;;17551:272::o;17828:426::-;-1:-1:-1;;;;;18031:32:105;;18013:51;;-1:-1:-1;;;;;18100:47:105;;18095:2;18080:18;;18073:75;18184:2;18179;18164:18;;18157:30;;;-1:-1:-1;;18204:44:105;;18229:18;;18221:6;18204:44;:::i;:::-;18196:52;17828:426;-1:-1:-1;;;;;17828:426:105:o;18259:514::-;-1:-1:-1;;;;;18488:32:105;;18470:51;;18569:10;18557:23;;18552:2;18537:18;;18530:51;-1:-1:-1;;;;;18617:47:105;;18612:2;18597:18;;18590:75;18701:3;18696:2;18681:18;;18674:31;;;-1:-1:-1;;18722:45:105;;18747:19;;18739:6;18722:45;:::i;:::-;18714:53;18259:514;-1:-1:-1;;;;;;18259:514:105:o;19386:314::-;-1:-1:-1;;;;;19561:32:105;;19543:51;;19630:2;19625;19610:18;;19603:30;;;-1:-1:-1;;19650:44:105;;19675:18;;19667:6;19650:44;:::i;19705:400::-;-1:-1:-1;;;;;19906:32:105;;19888:51;;19987:10;19975:23;;19970:2;19955:18;;19948:51;20035:2;20030;20015:18;;20008:30;;;-1:-1:-1;;20055:44:105;;20080:18;;20072:6;20055:44;:::i;21430:184::-;21500:6;21553:2;21541:9;21532:7;21528:23;21524:32;21521:52;;;21569:1;21566;21559:12;21521:52;-1:-1:-1;21592:16:105;;21430:184;-1:-1:-1;21430:184:105:o;21619:168::-;21659:7;21725:1;21721;21717:6;21713:14;21710:1;21707:21;21702:1;21695:9;21688:17;21684:45;21681:71;;;21732:18;;:::i;:::-;-1:-1:-1;21772:9:105;;21619:168::o;22491:339::-;22693:2;22675:21;;;22732:2;22712:18;;;22705:30;-1:-1:-1;;;22766:2:105;22751:18;;22744:45;22821:2;22806:18;;22491:339::o;22835:217::-;22875:1;22901;22891:132;;22945:10;22940:3;22936:20;22933:1;22926:31;22980:4;22977:1;22970:15;23008:4;23005:1;22998:15;22891:132;-1:-1:-1;23037:9:105;;22835:217::o;23057:127::-;23118:10;23113:3;23109:20;23106:1;23099:31;23149:4;23146:1;23139:15;23173:4;23170:1;23163:15;23189:127;23250:10;23245:3;23241:20;23238:1;23231:31;23281:4;23278:1;23271:15;23305:4;23302:1;23295:15;23321:455;-1:-1:-1;;;;;23616:15:105;;;23598:34;;23668:15;;;;23663:2;23648:18;;23641:43;23715:2;23700:18;;23693:34;23758:2;23743:18;;23736:34;;;;23547:3;23532:19;;23321:455::o;23781:127::-;23842:10;23837:3;23833:20;23830:1;23823:31;23873:4;23870:1;23863:15;23897:4;23894:1;23887:15;23913:255;23985:2;23979:9;24027:6;24015:19;;-1:-1:-1;;;;;24049:34:105;;24085:22;;;24046:62;24043:88;;;24111:18;;:::i;:::-;24147:2;24140:22;23913:255;:::o;24173:275::-;24244:2;24238:9;24309:2;24290:13;;-1:-1:-1;;24286:27:105;24274:40;;-1:-1:-1;;;;;24329:34:105;;24365:22;;;24326:62;24323:88;;;24391:18;;:::i;:::-;24427:2;24420:22;24173:275;;-1:-1:-1;24173:275:105:o;24453:183::-;24513:4;-1:-1:-1;;;;;24538:6:105;24535:30;24532:56;;;24568:18;;:::i;:::-;-1:-1:-1;24613:1:105;24609:14;24625:4;24605:25;;24453:183::o;24641:659::-;24706:5;24759:3;24752:4;24744:6;24740:17;24736:27;24726:55;;24777:1;24774;24767:12;24726:55;24806:6;24800:13;24832:4;24856:60;24872:43;24912:2;24872:43;:::i;:::-;24856:60;:::i;:::-;24950:15;;;25036:1;25032:10;;;;25020:23;;25016:32;;;24981:12;;;;25060:15;;;25057:35;;;25088:1;25085;25078:12;25057:35;25124:2;25116:6;25112:15;25136:135;25152:6;25147:3;25144:15;25136:135;;;25218:10;;25206:23;;25249:12;;;;25169;;25136:135;;;-1:-1:-1;25289:5:105;24641:659;-1:-1:-1;;;;;;24641:659:105:o;25305:363::-;25400:6;25453:2;25441:9;25432:7;25428:23;25424:32;25421:52;;;25469:1;25466;25459:12;25421:52;25502:9;25496:16;-1:-1:-1;;;;;25527:6:105;25524:30;25521:50;;;25567:1;25564;25557:12;25521:50;25590:72;25654:7;25645:6;25634:9;25630:22;25590:72;:::i;25673:265::-;25712:3;25740:9;;;25765:10;;-1:-1:-1;;;;;25784:27:105;;;25777:35;;25761:52;25758:78;;;25816:18;;:::i;:::-;-1:-1:-1;;;25863:19:105;;;25856:27;;25848:36;;25845:62;;;25887:18;;:::i;:::-;-1:-1:-1;;25923:9:105;;25673:265::o;25943:201::-;25981:3;26009:10;26054:2;26047:5;26043:14;26081:2;26072:7;26069:15;26066:41;;26087:18;;:::i;:::-;26136:1;26123:15;;25943:201;-1:-1:-1;;;25943:201:105:o;27833:156::-;27912:13;;27934:49;27912:13;27934:49;:::i;27994:269::-;28064:6;28117:2;28105:9;28096:7;28092:23;28088:32;28085:52;;;28133:1;28130;28123:12;28085:52;28165:9;28159:16;28184:49;28227:5;28184:49;:::i;28614:164::-;28690:13;;28739;;28732:21;28722:32;;28712:60;;28768:1;28765;28758:12;28783:202;28850:6;28903:2;28891:9;28882:7;28878:23;28874:32;28871:52;;;28919:1;28916;28909:12;28871:52;28942:37;28969:9;28942:37;:::i;29330:160::-;29407:13;;29460:4;29449:16;;29439:27;;29429:55;;29480:1;29477;29470:12;29495:177;29573:13;;-1:-1:-1;;;;;;29615:32:105;;29605:43;;29595:71;;29662:1;29659;29652:12;29677:496;29730:5;29783:3;29776:4;29768:6;29764:17;29760:27;29750:55;;29801:1;29798;29791:12;29750:55;29830:6;29824:13;-1:-1:-1;;;;;29852:2:105;29849:26;29846:52;;;29878:18;;:::i;:::-;29922:55;29965:2;29946:13;;-1:-1:-1;;29942:27:105;29971:4;29938:38;29922:55;:::i;:::-;30002:2;29993:7;29986:19;30048:3;30041:4;30036:2;30028:6;30024:15;30020:26;30017:35;30014:55;;;30065:1;30062;30055:12;30014:55;30078:64;30139:2;30132:4;30123:7;30119:18;30112:4;30104:6;30100:17;30078:64;:::i;30178:1342::-;30274:6;30327:2;30315:9;30306:7;30302:23;30298:32;30295:52;;;30343:1;30340;30333:12;30295:52;30376:9;30370:16;-1:-1:-1;;;;;30446:2:105;30438:6;30435:14;30432:34;;;30462:1;30459;30452:12;30432:34;30485:22;;;;30541:6;30523:16;;;30519:29;30516:49;;;30561:1;30558;30551:12;30516:49;30587:22;;:::i;:::-;30632:31;30660:2;30632:31;:::i;:::-;30625:5;30618:46;30696:40;30732:2;30728;30724:11;30696:40;:::i;:::-;30691:2;30684:5;30680:14;30673:64;30783:2;30779;30775:11;30769:18;30764:2;30757:5;30753:14;30746:42;30820;30858:2;30854;30850:11;30820:42;:::i;:::-;30815:2;30808:5;30804:14;30797:66;30896:42;30933:3;30929:2;30925:12;30896:42;:::i;:::-;30890:3;30883:5;30879:15;30872:67;30978:3;30974:2;30970:12;30964:19;31008:2;30998:8;30995:16;30992:36;;;31024:1;31021;31014:12;30992:36;31061:55;31108:7;31097:8;31093:2;31089:17;31061:55;:::i;:::-;31055:3;31048:5;31044:15;31037:80;;31164:3;31160:2;31156:12;31150:19;31144:3;31137:5;31133:15;31126:44;31217:3;31213:2;31209:12;31203:19;31197:3;31190:5;31186:15;31179:44;31242:3;31232:13;;31291:2;31287;31283:11;31277:18;31272:2;31265:5;31261:14;31254:42;31315:3;31305:13;;31350:42;31388:2;31384;31380:11;31350:42;:::i;:::-;31345:2;31338:5;31334:14;31327:66;31412:3;31402:13;;31447:42;31485:2;31481;31477:11;31447:42;:::i;:::-;31431:14;;;31424:66;;;;31435:5;30178:1342;-1:-1:-1;;;;30178:1342:105:o;31752:342::-;31834:6;31842;31850;31903:2;31891:9;31882:7;31878:23;31874:32;31871:52;;;31919:1;31916;31909:12;31871:52;31942:37;31969:9;31942:37;:::i;:::-;31932:47;;31998:46;32040:2;32029:9;32025:18;31998:46;:::i;:::-;31988:56;;32084:2;32073:9;32069:18;32063:25;32053:35;;31752:342;;;;;:::o;32099:675::-;-1:-1:-1;;;;;32440:15:105;;;32422:34;;32492:15;;32487:2;32472:18;;32465:43;32539:2;32524:18;;32517:34;;;32402:3;32582:2;32567:18;;32560:31;;;32365:4;;32614:45;;32639:19;;32631:6;32614:45;:::i;:::-;32708:9;32700:6;32696:22;32690:3;32679:9;32675:19;32668:51;32736:32;32761:6;32753;32736:32;:::i;32779:576::-;-1:-1:-1;;;;;33041:32:105;;33023:51;;33110:3;33105:2;33090:18;;33083:31;;;-1:-1:-1;;33137:45:105;;33162:19;;33154:6;33137:45;:::i;:::-;33232:6;33225:14;33218:22;33213:2;33202:9;33198:18;33191:50;33289:9;33281:6;33277:22;33272:2;33261:9;33257:18;33250:50;33317:32;33342:6;33334;33317:32;:::i;:::-;33309:40;32779:576;-1:-1:-1;;;;;;;32779:576:105:o;33360:335::-;33439:6;33492:2;33480:9;33471:7;33467:23;33463:32;33460:52;;;33508:1;33505;33498:12;33460:52;33541:9;33535:16;-1:-1:-1;;;;;33566:6:105;33563:30;33560:50;;;33606:1;33603;33596:12;33560:50;33629:60;33681:7;33672:6;33661:9;33657:22;33629:60;:::i;34108:429::-;34372:1;34368;34363:3;34359:11;34355:19;34347:6;34343:32;34332:9;34325:51;34412:6;34407:2;34396:9;34392:18;34385:34;34455:2;34450;34439:9;34435:18;34428:30;34306:4;34475:56;34527:2;34516:9;34512:18;34504:6;34475:56;:::i;34542:836::-;-1:-1:-1;;;;;34929:15:105;;;34911:34;;34981:15;;34976:2;34961:18;;34954:43;35028:2;35013:18;;35006:34;;;35076:3;35071:2;35056:18;;35049:31;;;34854:4;;35103:45;;35128:19;;35120:6;35103:45;:::i;:::-;35197:9;35189:6;35185:22;35179:3;35168:9;35164:19;35157:51;35231:32;35256:6;35248;35231:32;:::i;:::-;35217:46;;35312:9;35304:6;35300:22;35294:3;35283:9;35279:19;35272:51;35340:32;35365:6;35357;35340:32;:::i;:::-;35332:40;34542:836;-1:-1:-1;;;;;;;;;34542:836:105:o;38113:593::-;38335:4;-1:-1:-1;;;;;38437:2:105;38429:6;38425:15;38414:9;38407:34;38489:2;38481:6;38477:15;38472:2;38461:9;38457:18;38450:43;38541:2;38533:6;38529:15;38524:2;38513:9;38509:18;38502:43;38593:2;38585:6;38581:15;38576:2;38565:9;38561:18;38554:43;;38634:3;38628;38617:9;38613:19;38606:32;38655:45;38695:3;38684:9;38680:19;38672:6;38655:45;:::i;39544:1207::-;39672:6;39680;39733:2;39721:9;39712:7;39708:23;39704:32;39701:52;;;39749:1;39746;39739:12;39701:52;39782:9;39776:16;-1:-1:-1;;;;;39852:2:105;39844:6;39841:14;39838:34;;;39868:1;39865;39858:12;39838:34;39906:6;39895:9;39891:22;39881:32;;39951:7;39944:4;39940:2;39936:13;39932:27;39922:55;;39973:1;39970;39963:12;39922:55;40002:2;39996:9;40024:4;40048:60;40064:43;40104:2;40064:43;:::i;40048:60::-;40142:15;;;40224:1;40220:10;;;;40212:19;;40208:28;;;40173:12;;;;40248:19;;;40245:39;;;40280:1;40277;40270:12;40245:39;40304:11;;;;40324:209;40340:6;40335:3;40332:15;40324:209;;;40413:3;40407:10;40430:30;40454:5;40430:30;:::i;:::-;40473:18;;40357:12;;;;40511;;;;40324:209;;;40588:18;;;40582:25;40552:5;;-1:-1:-1;40582:25:105;;-1:-1:-1;;;40619:16:105;;;40616:36;;;40648:1;40645;40638:12;40616:36;;40671:74;40737:7;40726:8;40715:9;40711:24;40671:74;:::i;:::-;40661:84;;;39544:1207;;;;;:::o;40756:135::-;40795:3;40816:17;;;40813:43;;40836:18;;:::i;:::-;-1:-1:-1;40883:1:105;40872:13;;40756:135::o;41454:249::-;41523:6;41576:2;41564:9;41555:7;41551:23;41547:32;41544:52;;;41592:1;41589;41582:12;41544:52;41624:9;41618:16;41643:30;41667:5;41643:30;:::i;42153:603::-;42455:3;42444:9;42437:22;42418:4;42476:45;42516:3;42505:9;42501:19;42493:6;42476:45;:::i;:::-;-1:-1:-1;;;;;42595:15:105;;;42590:2;42575:18;;42568:43;42642:2;42627:18;;42620:34;;;;-1:-1:-1;42685:2:105;42670:18;;42663:34;;;;42734:15;;;42728:3;42713:19;;;42706:44;;;;42468:53;42153:603;-1:-1:-1;42153:603:105:o;42761:286::-;42934:2;42923:9;42916:21;42897:4;42954:44;42994:2;42983:9;42979:18;42971:6;42954:44;:::i;:::-;42946:52;;43034:6;43029:2;43018:9;43014:18;43007:34;42761:286;;;;;:::o",
|
|
31243
|
+
"source": "// SPDX-License-Identifier: AGPLv3\npragma solidity 0.8.14;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport {\n IInstantDistributionAgreementV1,\n ISuperfluidToken\n} from \"../interfaces/agreements/IInstantDistributionAgreementV1.sol\";\nimport {\n ISuperfluid,\n ISuperfluidGovernance,\n ISuperApp,\n SuperAppDefinitions\n}\nfrom \"../interfaces/superfluid/ISuperfluid.sol\";\nimport { AgreementBase } from \"./AgreementBase.sol\";\n\nimport { SlotsBitmapLibrary } from \"../libs/SlotsBitmapLibrary.sol\";\nimport { AgreementLibrary } from \"./AgreementLibrary.sol\";\n\n\n/**\n * @title InstantDistributionAgreementV1 contract\n * @author Superfluid\n * @dev Please read IInstantDistributionAgreementV1 for implementation notes.\n * @dev For more technical notes, please visit protocol-monorepo wiki area.\n *\n */\ncontract InstantDistributionAgreementV1 is\n AgreementBase,\n IInstantDistributionAgreementV1\n{\n\n /*\n E_NO_INDEX - index does not exist\n E_INDEX_EXISTS - index already exists\n E_INDEX_GROW - index value should grow\n E_LOW_BALANCE - insufficient balance\n E_SUBS_APPROVED subscription already approved\n E_SUBS_NOT_APPROVED subscription not approved\n E_NO_SUBS - subscription does not exist\n E_NOT_ALLOWED - operation not allowed\n E_NO_ZERO_SUBS - no zero address subscribers\n */\n\n using SafeCast for uint256;\n\n address public constant SLOTS_BITMAP_LIBRARY_ADDRESS = address(SlotsBitmapLibrary);\n\n /// @dev Subscriber state slot id for storing subs bitmap\n uint256 private constant _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID = 0;\n /// @dev Publisher state slot id for storing its deposit amount\n uint256 private constant _PUBLISHER_DEPOSIT_STATE_SLOT_ID = 1 << 32;\n /// @dev Subscriber state slot id starting ptoint for subscription data\n uint256 private constant _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START = 1 << 128;\n\n /// @dev Maximum number of subscriptions a subscriber can have\n uint32 private constant _MAX_NUM_SUBS = 256;\n /// @dev A special id that indicating the subscription is not approved yet\n uint32 private constant _UNALLOCATED_SUB_ID = type(uint32).max;\n\n // solhint-disable-next-line no-empty-blocks\n constructor(ISuperfluid host) AgreementBase(address(host)) {}\n\n /// @dev Agreement data for the index\n struct IndexData {\n uint128 indexValue;\n uint128 totalUnitsApproved;\n uint128 totalUnitsPending;\n }\n\n /// @dev Agreement data for the subscription\n struct SubscriptionData {\n uint32 subId;\n address publisher;\n uint32 indexId;\n uint128 indexValue;\n uint128 units;\n }\n\n /**************************************************************************\n * ISuperAgreement interface\n *************************************************************************/\n\n /// @dev ISuperAgreement.realtimeBalanceOf implementation\n function realtimeBalanceOf(\n ISuperfluidToken token,\n address account,\n uint256 /*time*/\n )\n external view override\n returns (\n int256 dynamicBalance,\n uint256 deposit,\n uint256 owedDeposit\n )\n {\n // as a subscriber\n // read all subs and calculate the real-time balance\n uint32[] memory slotIds;\n bytes32[] memory sidList;\n (slotIds, sidList) = _listSubscriptionIds(token, account);\n for (uint32 i = 0; i < sidList.length; ++i) {\n bool exist;\n SubscriptionData memory sdata;\n bytes32 iId;\n\n {\n uint32 subId = slotIds[i];\n (exist, sdata) = _getSubscriptionData(token, sidList[i]);\n assert(exist);\n assert(sdata.subId == subId);\n //require(exist, \"IDA: E_NO_SUBS\");\n iId = token.getAgreementStateSlot(\n address(this),\n account,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START + subId, 1)[0];\n }\n\n {\n IndexData memory idata;\n (exist, idata) = _getIndexData(token, iId);\n assert(exist);\n dynamicBalance = dynamicBalance + (\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256(uint256(idata.indexValue - sdata.indexValue)) * int256(uint256(sdata.units))\n );\n }\n }\n\n // as a publisher\n // calculate the deposits due to pending subscriptions\n deposit = _getPublisherDeposit(token, account);\n owedDeposit = 0;\n }\n\n /**************************************************************************\n * Index operations\n *************************************************************************/\n\n /// @dev IInstantDistributionAgreementV1.createIndex implementation\n function createIndex(\n ISuperfluidToken token,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n bytes32 iId = _getPublisherId(publisher, indexId);\n require(!_hasIndexData(token, iId), \"IDA: E_INDEX_EXISTS\");\n\n token.createAgreement(iId, _encodeIndexData(IndexData(0, 0, 0)));\n\n emit IndexCreated(token, publisher, indexId, context.userData);\n\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n /// @dev IInstantDistributionAgreementV1.getIndex implementation\n function getIndex(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId\n )\n external view override\n returns (\n bool exist,\n uint128 indexValue,\n uint128 totalUnitsApproved,\n uint128 totalUnitsPending)\n {\n IndexData memory idata;\n bytes32 iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n if (exist) {\n indexValue = idata.indexValue;\n totalUnitsApproved = idata.totalUnitsApproved;\n totalUnitsPending = idata.totalUnitsPending;\n }\n }\n\n /// @dev IInstantDistributionAgreementV1.calculateDistribution implementation\n function calculateDistribution(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n uint256 amount\n )\n external view override\n returns(\n uint256 actualAmount,\n uint128 newIndexValue)\n {\n bytes32 iId = _getPublisherId(publisher, indexId);\n (bool exist, IndexData memory idata) = _getIndexData(token, iId);\n require(exist, \"IDA: E_NO_INDEX\");\n\n uint256 totalUnits = uint256(idata.totalUnitsApproved + idata.totalUnitsPending);\n uint128 indexDelta = (amount / totalUnits).toUint128();\n newIndexValue = idata.indexValue + indexDelta;\n actualAmount = uint256(indexDelta) * totalUnits;\n }\n\n /// @dev IInstantDistributionAgreementV1.updateIndex implementation\n function updateIndex(\n ISuperfluidToken token,\n uint32 indexId,\n uint128 indexValue,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n (bytes32 iId, IndexData memory idata) = _loadIndexData(token, publisher, indexId);\n require(indexValue >= idata.indexValue, \"IDA: E_INDEX_GROW\");\n\n _updateIndex(token, publisher, indexId, iId, idata, indexValue, context.userData);\n\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n /// @dev IInstantDistributionAgreementV1.distribute implementation\n function distribute(\n ISuperfluidToken token,\n uint32 indexId,\n uint256 amount,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n address publisher = context.msgSender;\n (bytes32 iId, IndexData memory idata) = _loadIndexData(token, publisher, indexId);\n uint256 totalUnits = uint256(idata.totalUnitsApproved + idata.totalUnitsPending);\n\n if (totalUnits > 0) {\n uint128 indexDelta = (amount / totalUnits).toUint128();\n _updateIndex(token, publisher, indexId, iId, idata, idata.indexValue + indexDelta, context.userData);\n }\n // nothing to be recorded so far\n newCtx = ctx;\n }\n\n function _updateIndex(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes32 iId,\n IndexData memory idata,\n uint128 newIndexValue,\n bytes memory userData\n )\n private\n {\n // - settle the publisher balance INSTANT-ly (ding ding ding, IDA)\n // - adjust static balance directly\n token.settleBalance(publisher,\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n (-int256(uint256(newIndexValue - idata.indexValue))) * int256(uint256(idata.totalUnitsApproved)));\n // - adjust the publisher's deposit amount\n _adjustPublisherDeposit(token, publisher,\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256(uint256(newIndexValue - idata.indexValue)) * int256(uint256(idata.totalUnitsPending)));\n // adjust the publisher's index data\n uint128 oldIndexValue = idata.indexValue;\n idata.indexValue = newIndexValue;\n token.updateAgreementData(iId, _encodeIndexData(idata));\n\n emit IndexUpdated(\n token,\n publisher,\n indexId,\n oldIndexValue,\n newIndexValue,\n idata.totalUnitsPending,\n idata.totalUnitsApproved,\n userData);\n\n // check account solvency\n require(!token.isAccountCriticalNow(publisher), \"IDA: E_LOW_BALANCE\");\n }\n\n function _loadIndexData(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId)\n private view\n returns (\n bytes32 iId,\n IndexData memory idata\n )\n {\n bool exist;\n iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n require(exist, \"IDA: E_NO_INDEX\");\n }\n\n /**************************************************************************\n * Subscription operations\n *************************************************************************/\n\n // Stack variables to avoid stack too deep errors in some functions\n // solhint-disable-next-line contract-name-camelcase\n struct _SubscriptionOperationVars {\n bytes32 iId;\n bool subscriptionExists;\n bytes32 sId;\n IndexData idata;\n SubscriptionData sdata;\n bytes cbdata;\n }\n\n /// @dev IInstantDistributionAgreementV1.approveSubscription implementation\n function approveSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address subscriber;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n subscriber = context.msgSender;\n userData = context.userData;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n vars.subscriptionExists,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n if (vars.subscriptionExists) {\n // required condition check\n require(vars.sdata.subId == _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_APPROVED\");\n }\n\n newCtx = ctx;\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n\n if (!vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_CREATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n\n vars.sdata = SubscriptionData({\n publisher: publisher,\n indexId: indexId,\n subId: 0,\n units: 0,\n indexValue: vars.idata.indexValue\n });\n // add to subscription list of the subscriber\n vars.sdata.subId = _findAndFillSubsBitmap(token, subscriber, vars.iId);\n token.createAgreement(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_CREATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // update publisher data and adjust publisher's deposits\n vars.idata.totalUnitsApproved += vars.sdata.units;\n vars.idata.totalUnitsPending -= vars.sdata.units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n\n // update subscription data and adjust subscriber's balance\n token.settleBalance(subscriber, balanceDelta);\n vars.sdata.indexValue = vars.idata.indexValue;\n vars.sdata.subId = _findAndFillSubsBitmap(token, subscriber, vars.iId);\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n }\n\n // can index up to three words, hence splitting into two events from publisher or subscriber's view.\n emit IndexSubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionApproved(token, subscriber, publisher, indexId, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.revokeSubscription implementation\n function revokeSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address subscriber;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n subscriber = context.msgSender;\n userData = context.userData;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n // should not revoke an pending(un-approved) subscription\n require(vars.sdata.subId != _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_NOT_APPROVED\");\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_TERMINATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE downcasting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n vars.idata.totalUnitsApproved = vars.idata.totalUnitsApproved - vars.sdata.units;\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending + vars.sdata.units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n\n // remove subscription from subscriber's bitmap\n _clearSubsBitmap(token, subscriber, vars.sdata.subId);\n\n // sync pending distributions\n vars.sdata.indexValue = vars.idata.indexValue;\n // unlink publisher and subscriber\n vars.sdata.subId = _UNALLOCATED_SUB_ID;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n // settle subscriber static balance as a result to keep balance unchanged\n token.settleBalance(subscriber, balanceDelta);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_TERMINATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n\n emit IndexUnsubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionRevoked(token, subscriber, publisher, indexId, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.updateSubscription implementation\n function updateSubscription(\n ISuperfluidToken token,\n uint32 indexId,\n address subscriber,\n uint128 units,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n bytes memory userData;\n address publisher;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n userData = context.userData;\n publisher = context.msgSender;\n }\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n vars.subscriptionExists,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n subscriber,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n // before-hook callback\n if (vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_CREATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n }\n\n // update publisher data\n if (vars.subscriptionExists && vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n // if the subscription exist and not approved, update the approved units amount\n\n // update total units\n vars.idata.totalUnitsApproved = (\n uint256(vars.idata.totalUnitsApproved) +\n uint256(units) -\n uint256(vars.sdata.units)\n ).toUint128();\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n } else if (vars.subscriptionExists) {\n // if the subscription exists and approved, update the pending units amount\n\n // update pending subscription units of the publisher\n vars.idata.totalUnitsPending = (\n uint256(vars.idata.totalUnitsPending) +\n uint256(units) -\n uint256(vars.sdata.units)\n ).toUint128();\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n } else {\n // if the E_NO_SUBS, create it and then update the pending units amount\n\n // create unallocated subscription\n vars.sdata = SubscriptionData({\n publisher: publisher,\n indexId: indexId,\n subId: _UNALLOCATED_SUB_ID,\n units: units,\n indexValue: vars.idata.indexValue\n });\n token.createAgreement(vars.sId, _encodeSubscriptionData(vars.sdata));\n\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending + units;\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n }\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // adjust publisher's deposit and balances if subscription is pending\n if (vars.sdata.subId == _UNALLOCATED_SUB_ID) {\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n }\n\n // settle subscriber static balance\n token.settleBalance(subscriber, balanceDelta);\n\n // update subscription data if necessary\n if (vars.subscriptionExists) {\n vars.sdata.indexValue = vars.idata.indexValue;\n vars.sdata.units = units;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n }\n\n // after-hook callback\n if (vars.subscriptionExists) {\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_CREATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n }\n\n emit IndexUnitsUpdated(token, publisher, indexId, subscriber, units, userData);\n emit SubscriptionUnitsUpdated(token, subscriber, publisher, indexId, units, userData);\n }\n\n /// @dev IInstantDistributionAgreementV1.getSubscription implementation\n function getSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber\n )\n external view override\n returns (\n bool exist,\n bool approved,\n uint128 units,\n uint256 pendingDistribution\n )\n {\n bytes32 iId;\n bytes32 sId;\n IndexData memory idata;\n SubscriptionData memory sdata;\n\n (\n iId,\n sId,\n idata,\n exist,\n sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, false);\n\n if (!exist) return (false, false, 0, 0);\n approved = sdata.subId != _UNALLOCATED_SUB_ID;\n units = sdata.units;\n pendingDistribution = approved ? 0 : uint256(idata.indexValue - sdata.indexValue) * uint256(sdata.units);\n }\n\n /// @dev IInstantDistributionAgreementV1.getSubscriptionByID implementation\n function getSubscriptionByID(\n ISuperfluidToken token,\n bytes32 agreementId\n )\n external view override\n returns(\n address publisher,\n uint32 indexId,\n bool approved,\n uint128 units,\n uint256 pendingDistribution\n )\n {\n bool exist;\n bytes32 iId;\n IndexData memory idata;\n SubscriptionData memory sdata;\n\n (exist, sdata) = _getSubscriptionData(token, agreementId);\n require(exist, \"IDA: E_NO_SUBS\");\n\n publisher = sdata.publisher;\n indexId = sdata.indexId;\n iId = _getPublisherId(publisher, indexId);\n (exist, idata) = _getIndexData(token, iId);\n assert(exist);\n\n approved = sdata.subId != _UNALLOCATED_SUB_ID;\n units = sdata.units;\n pendingDistribution = approved ? 0 :\n uint256(idata.indexValue - sdata.indexValue) * uint256(sdata.units);\n }\n\n /// @dev IInstantDistributionAgreementV1.listSubscriptions implementation\n function listSubscriptions(\n ISuperfluidToken token,\n address subscriber\n )\n external view override\n returns(\n address[] memory publishers,\n uint32[] memory indexIds,\n uint128[] memory unitsList)\n {\n uint32[] memory slotIds;\n bytes32[] memory sidList;\n (slotIds, sidList) = _listSubscriptionIds(token, subscriber);\n bool exist;\n SubscriptionData memory sdata;\n publishers = new address[](sidList.length);\n indexIds = new uint32[](sidList.length);\n unitsList = new uint128[](sidList.length);\n for (uint32 i = 0; i < sidList.length; ++i) {\n uint32 subId = slotIds[i];\n bytes32 sId = sidList[i];\n (exist, sdata) = _getSubscriptionData(token, sId);\n assert(exist);\n assert(sdata.subId == subId);\n publishers[i] = sdata.publisher;\n indexIds[i] = sdata.indexId;\n unitsList[i] = sdata.units;\n }\n }\n\n /// @dev IInstantDistributionAgreementV1.deleteSubscription implementation\n function deleteSubscription(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n address sender;\n bytes memory userData;\n {\n ISuperfluid.Context memory context = AgreementLibrary.authorizeTokenAccess(token, ctx);\n sender = context.msgSender;\n userData = context.userData;\n }\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n\n // only publisher can delete a subscription\n // follows from the invariant that only the publisher\n // has the ability to modify the units a subscriber has\n require(sender == publisher, \"IDA: E_NOT_ALLOWED\");\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n subscriber,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_TERMINATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n // NOTE casting these values to int256 is okay because the original values\n // are uint128\n int256 balanceDelta = int256(uint256(vars.idata.indexValue - vars.sdata.indexValue))\n * int256(uint256(vars.sdata.units));\n\n // update publisher index agreement data\n if (vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n vars.idata.totalUnitsApproved = vars.idata.totalUnitsApproved - vars.sdata.units;\n } else {\n vars.idata.totalUnitsPending = vars.idata.totalUnitsPending - vars.sdata.units;\n }\n token.updateAgreementData(vars.iId, _encodeIndexData(vars.idata));\n\n // remove subscription from subscriber's bitmap\n if (vars.sdata.subId != _UNALLOCATED_SUB_ID) {\n _clearSubsBitmap(token, subscriber, vars.sdata.subId);\n }\n\n // move from publisher's deposit to static balance\n if (vars.sdata.subId == _UNALLOCATED_SUB_ID) {\n _adjustPublisherDeposit(token, publisher, -balanceDelta);\n token.settleBalance(publisher, -balanceDelta);\n }\n\n // terminate subscription agreement data\n token.terminateAgreement(vars.sId, 2);\n\n // settle subscriber static balance\n token.settleBalance(subscriber, balanceDelta);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_TERMINATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n\n emit IndexUnsubscribed(token, publisher, indexId, subscriber, userData);\n emit SubscriptionRevoked(token, subscriber, publisher, indexId, userData);\n emit IndexUnitsUpdated(token, publisher, indexId, subscriber, 0, userData);\n emit SubscriptionUnitsUpdated(token, subscriber, publisher, indexId, 0, userData);\n }\n\n function claim(\n ISuperfluidToken token,\n address publisher,\n uint32 indexId,\n address subscriber,\n bytes calldata ctx\n )\n external override\n returns(bytes memory newCtx)\n {\n AgreementLibrary.authorizeTokenAccess(token, ctx);\n require(subscriber != address(0), \"IDA: E_NO_ZERO_SUBS\");\n\n _SubscriptionOperationVars memory vars;\n AgreementLibrary.CallbackInputs memory cbStates;\n\n (\n vars.iId,\n vars.sId,\n vars.idata,\n ,\n vars.sdata\n ) = _loadAllData(token, publisher, subscriber, indexId, true);\n\n // required condition check\n require(vars.sdata.subId == _UNALLOCATED_SUB_ID, \"IDA: E_SUBS_APPROVED\");\n\n uint256 pendingDistribution = uint256(vars.idata.indexValue - vars.sdata.indexValue)\n * uint256(vars.sdata.units);\n\n cbStates = AgreementLibrary.createCallbackInputs(\n token,\n publisher,\n vars.sId,\n \"\");\n newCtx = ctx;\n\n if (pendingDistribution > 0) {\n cbStates.noopBit = SuperAppDefinitions.BEFORE_AGREEMENT_UPDATED_NOOP;\n vars.cbdata = AgreementLibrary.callAppBeforeCallback(cbStates, newCtx);\n\n // adjust publisher's deposits\n _adjustPublisherDeposit(token, publisher, -int256(pendingDistribution));\n token.settleBalance(publisher, -int256(pendingDistribution));\n\n // update subscription data and adjust subscriber's balance\n vars.sdata.indexValue = vars.idata.indexValue;\n token.updateAgreementData(vars.sId, _encodeSubscriptionData(vars.sdata));\n token.settleBalance(subscriber, int256(pendingDistribution));\n\n emit IndexDistributionClaimed(token, publisher, indexId, subscriber, pendingDistribution);\n emit SubscriptionDistributionClaimed(token, subscriber, publisher, indexId, pendingDistribution);\n\n cbStates.noopBit = SuperAppDefinitions.AFTER_AGREEMENT_UPDATED_NOOP;\n (, newCtx) = AgreementLibrary.callAppAfterCallback(cbStates, vars.cbdata, newCtx);\n } else {\n // nothing to be recorded in this case\n newCtx = ctx;\n }\n }\n\n function _loadAllData(\n ISuperfluidToken token,\n address publisher,\n address subscriber,\n uint32 indexId,\n bool requireSubscriptionExisting\n )\n private view\n returns (\n bytes32 iId,\n bytes32 sId,\n IndexData memory idata,\n bool subscriptionExists,\n SubscriptionData memory sdata\n )\n {\n bool indexExists;\n iId = _getPublisherId(publisher, indexId);\n sId = _getSubscriptionId(subscriber, iId);\n (indexExists, idata) = _getIndexData(token, iId);\n require(indexExists, \"IDA: E_NO_INDEX\");\n (subscriptionExists, sdata) = _getSubscriptionData(token, sId);\n if (requireSubscriptionExisting) {\n require(subscriptionExists, \"IDA: E_NO_SUBS\");\n // sanity check\n assert(sdata.publisher == publisher);\n assert(sdata.indexId == indexId);\n }\n }\n\n /**************************************************************************\n * internal helpers\n *************************************************************************/\n\n function _getPublisherId(\n address publisher,\n uint32 indexId\n )\n private pure\n returns (bytes32 iId)\n {\n return keccak256(abi.encodePacked(\"publisher\", publisher, indexId));\n }\n\n function _getSubscriptionId(\n address subscriber,\n bytes32 iId\n )\n private pure\n returns (bytes32 sId)\n {\n return keccak256(abi.encodePacked(\"subscription\", subscriber, iId));\n }\n\n // # Index data operations\n //\n // Data packing:\n //\n // WORD 1: | existence bit | indexValue |\n // | 128b | 128b |\n // WORD 2: | totalUnitsPending | totalUnitsApproved |\n // | 128b | 12b |\n\n function _encodeIndexData(\n IndexData memory idata\n )\n private pure\n returns (bytes32[] memory data) {\n data = new bytes32[](2);\n data[0] = bytes32(\n uint256(1 << 128) /* existance bit */ |\n uint256(idata.indexValue)\n );\n data[1] = bytes32(\n (uint256(idata.totalUnitsApproved)) |\n (uint256(idata.totalUnitsPending) << 128)\n );\n }\n\n function _hasIndexData(\n ISuperfluidToken token,\n bytes32 iId\n )\n private view\n returns (bool exist)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), iId, 2);\n uint256 a = uint256(adata[0]);\n exist = a > 0;\n }\n\n function _getIndexData(\n ISuperfluidToken token,\n bytes32 iId\n )\n private view\n returns (bool exist, IndexData memory idata)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), iId, 2);\n uint256 a = uint256(adata[0]);\n uint256 b = uint256(adata[1]);\n exist = a > 0;\n if (exist) {\n // NOTE We will do an unsafe downcast from uint256 => uint128\n // as we know this is safe\n // see https://gist.github.com/0xdavinchee/9834dc689543f19ec07872ad7d766b09\n idata.indexValue = uint128(a);\n idata.totalUnitsApproved = uint128(b);\n idata.totalUnitsPending = uint128(b >> 128);\n }\n }\n\n\n // # Publisher's deposit amount\n //\n // It is stored in state slot in one word\n\n function _getPublisherDeposit(\n ISuperfluidToken token,\n address publisher\n )\n private view\n returns (uint256)\n {\n bytes32[] memory data = token.getAgreementStateSlot(\n address(this),\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n 1);\n return uint256(data[0]);\n }\n\n function _adjustPublisherDeposit(\n ISuperfluidToken token,\n address publisher,\n int256 delta\n )\n private\n {\n if (delta == 0) return;\n bytes32[] memory data = token.getAgreementStateSlot(\n address(this),\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n 1);\n data[0] = bytes32(uint256(uint256(data[0]).toInt256() + delta));\n token.updateAgreementStateSlot(\n publisher,\n _PUBLISHER_DEPOSIT_STATE_SLOT_ID,\n data);\n }\n\n // # Subscription data operations\n //\n // Data packing:\n //\n // WORD 1: | publisher | RESERVED | indexId | subId |\n // | 160b | 32b | 32b | 32b |\n // WORD 2: | units | indexValue |\n // | 128b | 128b |\n\n function _encodeSubscriptionData(\n SubscriptionData memory sdata\n )\n private pure\n returns (bytes32[] memory data)\n {\n data = new bytes32[](2);\n data[0] = bytes32(\n (uint256(uint160(sdata.publisher)) << (12*8)) |\n (uint256(sdata.indexId) << 32) |\n uint256(sdata.subId)\n );\n data[1] = bytes32(\n uint256(sdata.indexValue) |\n (uint256(sdata.units) << 128)\n );\n }\n\n function _getSubscriptionData(\n ISuperfluidToken token,\n bytes32 sId\n )\n private view\n returns (bool exist, SubscriptionData memory sdata)\n {\n bytes32[] memory adata = token.getAgreementData(address(this), sId, 2);\n uint256 a = uint256(adata[0]);\n uint256 b = uint256(adata[1]);\n exist = a > 0;\n if (exist) {\n sdata.publisher = address(uint160(a >> (12*8)));\n sdata.indexId = uint32((a >> 32) & type(uint32).max);\n sdata.subId = uint32(a & type(uint32).max);\n // NOTE We will do an unsafe downcast from uint256 => uint128\n // as we know this is safe\n // see https://gist.github.com/0xdavinchee/9834dc689543f19ec07872ad7d766b09\n sdata.indexValue = uint128(b);\n sdata.units = uint128(b >> 128);\n }\n }\n\n // # Subscription bitmap operations\n //\n // ## Subscription bitmap state slot\n //\n // slotId: _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID)\n //\n // Subscriber can store up to _MAX_NUM_SUBS amount of subscriptions.\n // For each subscription approved it allocated with a subId with a value in [0, _MAX_NUM_SUBS).\n // The allocation is to fill one bit in the subscription bitmap.\n //\n // ## Subscription reference state slots\n //\n // slotId: _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START + subId)\n //\n // It stores the index data ID.\n\n function _findAndFillSubsBitmap(\n ISuperfluidToken token,\n address subscriber,\n bytes32 iId\n )\n private\n returns (uint32 subId)\n {\n return SlotsBitmapLibrary.findEmptySlotAndFill(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START,\n iId);\n }\n\n function _clearSubsBitmap(\n ISuperfluidToken token,\n address subscriber,\n uint32 subId\n )\n private\n {\n SlotsBitmapLibrary.clearSlot(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n subId);\n }\n\n function _listSubscriptionIds(\n ISuperfluidToken token,\n address subscriber\n )\n private view\n returns (\n uint32[] memory slotIds,\n bytes32[] memory sidList)\n {\n (slotIds, sidList) = SlotsBitmapLibrary.listData(\n token,\n subscriber,\n _SUBSCRIBER_SUBS_BITMAP_STATE_SLOT_ID,\n _SUBSCRIBER_SUB_DATA_STATE_SLOT_ID_START);\n // map data to subId\n for (uint i = 0; i < sidList.length; ++i) {\n sidList[i] = _getSubscriptionId(subscriber, sidList[i]);\n }\n }\n\n}\n",
|
|
31244
31244
|
"sourcePath": "/home/runner/work/protocol-monorepo/protocol-monorepo/packages/ethereum-contracts/contracts/agreements/InstantDistributionAgreementV1.sol",
|
|
31245
31245
|
"ast": {
|
|
31246
31246
|
"absolutePath": "project:/contracts/agreements/InstantDistributionAgreementV1.sol",
|
|
@@ -31288,7 +31288,7 @@
|
|
|
31288
31288
|
"literals": [
|
|
31289
31289
|
"solidity",
|
|
31290
31290
|
"0.8",
|
|
31291
|
-
".
|
|
31291
|
+
".14"
|
|
31292
31292
|
],
|
|
31293
31293
|
"nodeType": "PragmaDirective",
|
|
31294
31294
|
"src": "35:23:33"
|
|
@@ -31535,7 +31535,7 @@
|
|
|
31535
31535
|
16771,
|
|
31536
31536
|
4375,
|
|
31537
31537
|
17271,
|
|
31538
|
-
|
|
31538
|
+
34857,
|
|
31539
31539
|
762
|
|
31540
31540
|
],
|
|
31541
31541
|
"name": "InstantDistributionAgreementV1",
|
|
@@ -74587,11 +74587,11 @@
|
|
|
74587
74587
|
},
|
|
74588
74588
|
"compiler": {
|
|
74589
74589
|
"name": "solc",
|
|
74590
|
-
"version": "0.8.
|
|
74590
|
+
"version": "0.8.14+commit.80d49f37.Emscripten.clang"
|
|
74591
74591
|
},
|
|
74592
74592
|
"networks": {},
|
|
74593
74593
|
"schemaVersion": "3.4.7",
|
|
74594
|
-
"updatedAt": "2022-06-
|
|
74594
|
+
"updatedAt": "2022-06-21T09:02:26.749Z",
|
|
74595
74595
|
"devdoc": {
|
|
74596
74596
|
"author": "Superfluid",
|
|
74597
74597
|
"details": "Please read IInstantDistributionAgreementV1 for implementation notes.For more technical notes, please visit protocol-monorepo wiki area.",
|
|
@@ -74609,7 +74609,7 @@
|
|
|
74609
74609
|
"claim(address,address,uint32,address,bytes)": {
|
|
74610
74610
|
"details": "Claim pending distributions",
|
|
74611
74611
|
"params": {
|
|
74612
|
-
"ctx": "Context bytes (see ISuperfluid.sol for Context struct)
|
|
74612
|
+
"ctx": "Context bytes (see ISuperfluid.sol for Context struct)",
|
|
74613
74613
|
"indexId": "Id of the index",
|
|
74614
74614
|
"publisher": "The publisher of the index",
|
|
74615
74615
|
"subscriber": "The subscriber's address",
|