From 93950e8bc6674fa97396622d8fce03be719db82c Mon Sep 17 00:00:00 2001 From: Savya Bikram Shah Date: Wed, 27 May 2026 18:56:17 +0545 Subject: [PATCH] Progression. and Drawing Catalog --- .../App/LifetimeScopes/BaseLifetimeScope.cs | 2 +- .../Features/Coloring/IColorPalette.cs | 2 +- .../{Drawing.meta => DrawingCatalog.meta} | 0 .../IDrawingCatalogController.cs | 14 + .../IDrawingCatalogController.cs.meta | 3 + .../IDrawingTemplate.cs | 3 +- .../IDrawingTemplate.cs.meta | 0 .../IDrawingTemplateCatalog.cs | 8 +- .../IDrawingTemplateCatalog.cs.meta | 0 .../Core/Contracts/Features/Progression.meta | 8 + .../Progression/IProgressionSystem.cs | 25 + .../Progression/IProgressionSystem.cs.meta | 2 + .../Data/Dynamic/Features/Progression.meta | 8 + .../Features/Progression/DrawingProgress.cs | 38 + .../Progression/DrawingProgress.cs.meta | 2 + .../Progression/ProgressionRootDto.cs | 11 + .../Progression/ProgressionRootDto.cs.meta | 3 + .../Features/Progression/RegionColorEntry.cs | 11 + .../Progression/RegionColorEntry.cs.meta | 3 + Assets/Darkmatter/Code/Core/Data/Signals.meta | 8 + .../Code/Core/Data/Signals/Features.meta | 8 + .../Data/Signals/Features/DrawingCatalog.meta | 8 + .../DrawingCatalog/DrawingSelectedSignal.cs | 4 + .../DrawingSelectedSignal.cs.meta | 2 + .../Core/Data/Static/Features/Coloring.meta | 8 + .../Features/Coloring/ColorPaletteSO.cs | 13 + .../Features/Coloring/ColorPaletteSO.cs.meta | 2 + .../{Drawing.meta => DrawingTemplate.meta} | 0 .../DrawingTemplateSO.cs | 5 +- .../DrawingTemplateSO.cs.meta | 0 .../Data/Static/Features/ShapeBuilder.meta | 3 + .../{Drawing => ShapeBuilder}/ShapeSO.cs | 2 +- .../{Drawing => ShapeBuilder}/ShapeSO.cs.meta | 0 .../Darkmatter/Code/Core/Enums/Features.meta | 8 + .../Code/Core/Enums/Features/Progression.meta | 8 + .../Features/Progression/DrawingPhase.cs | 8 + .../Features/Progression/DrawingPhase.cs.meta | 2 + .../Code/Features/DrawingCatalog.meta | 8 + .../Features.DrawingCatalog.asmdef | 20 + .../Features.DrawingCatalog.asmdef.meta | 7 + .../Features/DrawingCatalog/Installers.meta | 8 + .../Installers/DrawingCatalogFeatureModule.cs | 21 + .../DrawingCatalogFeatureModule.cs.meta | 2 + .../Code/Features/DrawingCatalog/Systems.meta | 8 + .../Systems/DrawingCatalogController.cs | 56 + .../Systems/DrawingCatalogController.cs.meta | 2 + .../Code/Features/DrawingCatalog/UI.meta | 8 + .../DrawingCatalog/UI/CatalogItemVM.cs | 15 + .../DrawingCatalog/UI/CatalogItemVM.cs.meta | 3 + .../DrawingCatalog/UI/DrawingCatalogButton.cs | 18 + .../UI/DrawingCatalogButton.cs.meta | 3 + .../UI/DrawingCatalogPresenter.cs | 61 + .../UI/DrawingCatalogPresenter.cs.meta | 2 + .../DrawingCatalog/UI/DrawingCatalogView.cs | 35 + .../UI/DrawingCatalogView.cs.meta | 2 + .../Code/Features/DrawingTemplate.meta | 8 + .../Features.DrawingTemplates.asmdef | 20 + .../Features.DrawingTemplates.asmdef.meta | 7 + .../Features/DrawingTemplate/Installers.meta | 8 + .../DrawingTemplateFeatureModule.cs | 16 + .../DrawingTemplateFeatureModule.cs.meta | 2 + .../Features/DrawingTemplate/Systems.meta | 8 + .../AddressableDrawingTemplateCatalog.cs | 112 + .../AddressableDrawingTemplateCatalog.cs.meta | 2 + ...rviceModule.cs => HistoryFeatureModule.cs} | 2 +- ...e.cs.meta => HistoryFeatureModule.cs.meta} | 0 .../Darkmatter/Code/Features/Progression.meta | 8 + .../Progression/Features.Progression.asmdef | 20 + .../Features.Progression.asmdef.meta | 7 + .../Code/Features/Progression/Installers.meta | 8 + .../Installers/ProgressionFeatureModule.cs | 17 + .../ProgressionFeatureModule.cs.meta | 2 + .../Code/Features/Progression/Systems.meta | 8 + .../Systems/ProgressionRepository.cs | 151 + .../Systems/ProgressionRepository.cs.meta | 3 + .../Progression/Systems/ProgressionSystem.cs | 95 + .../Systems/ProgressionSystem.cs.meta | 2 + .../{IServiceModule.cs => IModule.cs} | 2 +- ...IServiceModule.cs.meta => IModule.cs.meta} | 0 .../PlayerPrefs/Runtime/PlayerPrefsKeys.cs | 42 +- ...icsServiceModule.cs => AnalyticsModule.cs} | 2 +- ...Module.cs.meta => AnalyticsModule.cs.meta} | 0 ...CameraServiceModule.cs => CameraModule.cs} | 2 +- ...iceModule.cs.meta => CameraModule.cs.meta} | 0 ...ptureServiceModule.cs => CaptureModule.cs} | 2 +- ...ceModule.cs.meta => CaptureModule.cs.meta} | 0 ...lleryServiceModule.cs => GalleryModule.cs} | 2 +- ...ceModule.cs.meta => GalleryModule.cs.meta} | 0 Assets/Darkmatter/Data/PlayerPrefs.meta | 8 + .../PlayerPrefs/PlayerPrefsKeyRegistry.asset | 15 + .../PlayerPrefsKeyRegistry.asset.meta | 8 + Assets/Darkmatter/Scenes/Boot.unity | 124 + Assets/Darkmatter/Scenes/GamePlay.unity | 6 +- Assets/NuGet.config | 18 + Assets/NuGet.config.meta | 28 + Assets/Packages.meta | 8 + Assets/Packages/Newtonsoft.Json.13.0.4.meta | 8 + .../Newtonsoft.Json.13.0.4/.signature.p7s | Bin 0 -> 26653 bytes .../Newtonsoft.Json.13.0.4/LICENSE.md | 20 + .../Newtonsoft.Json.13.0.4/LICENSE.md.meta | 7 + .../Newtonsoft.Json.nuspec | 41 + .../Newtonsoft.Json.nuspec.meta | 7 + .../Packages/Newtonsoft.Json.13.0.4/README.md | 71 + .../Newtonsoft.Json.13.0.4/README.md.meta | 7 + .../Packages/Newtonsoft.Json.13.0.4/lib.meta | 8 + .../lib/netstandard2.0.meta | 8 + .../lib/netstandard2.0/Newtonsoft.Json.dll | Bin 0 -> 717736 bytes .../netstandard2.0/Newtonsoft.Json.dll.meta | 29 + .../lib/netstandard2.0/Newtonsoft.Json.xml | 11673 ++++++++++++++++ .../netstandard2.0/Newtonsoft.Json.xml.meta | 7 + .../Newtonsoft.Json.13.0.4/packageIcon.png | Bin 0 -> 8956 bytes .../packageIcon.png.meta | 182 + Assets/Packages/ZLinq.1.5.6.meta | 8 + Assets/Packages/ZLinq.1.5.6/.signature.p7s | Bin 0 -> 12981 bytes Assets/Packages/ZLinq.1.5.6/Icon.png | Bin 0 -> 3185 bytes Assets/Packages/ZLinq.1.5.6/Icon.png.meta | 182 + Assets/Packages/ZLinq.1.5.6/README.md | 1096 ++ Assets/Packages/ZLinq.1.5.6/README.md.meta | 7 + Assets/Packages/ZLinq.1.5.6/ZLinq.nuspec | 31 + Assets/Packages/ZLinq.1.5.6/ZLinq.nuspec.meta | 7 + Assets/Packages/ZLinq.1.5.6/lib.meta | 8 + .../ZLinq.1.5.6/lib/netstandard2.1.meta | 8 + .../ZLinq.1.5.6/lib/netstandard2.1/ZLinq.dll | Bin 0 -> 246272 bytes .../lib/netstandard2.1/ZLinq.dll.meta | 29 + .../ZLinq.1.5.6/lib/netstandard2.1/ZLinq.xml | 493 + .../lib/netstandard2.1/ZLinq.xml.meta | 7 + Assets/csc.rsp | 1 + Assets/csc.rsp.meta | 7 + Assets/packages.config | 5 + Assets/packages.config.meta | 28 + .../.signature.p7s | Bin 0 -> 25740 bytes Packages/Microsoft.Bcl.Memory.10.0.5/Icon.png | Bin 0 -> 2140 bytes .../Microsoft.Bcl.Memory.10.0.5.nupkg | Bin 0 -> 244278 bytes .../Microsoft.Bcl.Memory.10.0.5/PACKAGE.md | 87 + .../THIRD-PARTY-NOTICES.TXT | 1418 ++ .../net461/Microsoft.Bcl.Memory.targets | 6 + .../buildTransitive/net462/_._ | 0 .../buildTransitive/net8.0/_._ | 0 .../Microsoft.Bcl.Memory.targets | 6 + .../lib/net10.0/Microsoft.Bcl.Memory.dll | Bin 0 -> 16144 bytes .../lib/net10.0/Microsoft.Bcl.Memory.xml | 8 + .../lib/net462/Microsoft.Bcl.Memory.dll | Bin 0 -> 78096 bytes .../lib/net462/Microsoft.Bcl.Memory.xml | 1508 ++ .../lib/net8.0/Microsoft.Bcl.Memory.dll | Bin 0 -> 58680 bytes .../lib/net8.0/Microsoft.Bcl.Memory.xml | 296 + .../lib/net9.0/Microsoft.Bcl.Memory.dll | Bin 0 -> 16136 bytes .../lib/net9.0/Microsoft.Bcl.Memory.xml | 8 + .../netstandard2.0/Microsoft.Bcl.Memory.dll | Bin 0 -> 78088 bytes .../netstandard2.0/Microsoft.Bcl.Memory.xml | 1508 ++ .../netstandard2.1/Microsoft.Bcl.Memory.dll | Bin 0 -> 74504 bytes .../netstandard2.1/Microsoft.Bcl.Memory.xml | 1325 ++ .../useSharedDesignerContext.txt | 0 Packages/System.Buffers.4.6.1/.signature.p7s | Bin 0 -> 25616 bytes Packages/System.Buffers.4.6.1/Icon.png | Bin 0 -> 7006 bytes Packages/System.Buffers.4.6.1/PACKAGE.md | 21 + .../System.Buffers.4.6.1.nupkg | Bin 0 -> 67724 bytes .../net461/System.Buffers.targets | 6 + .../buildTransitive/net462/_._ | 0 .../lib/net462/System.Buffers.dll | Bin 0 -> 23816 bytes .../lib/net462/System.Buffers.xml | 173 + .../lib/netcoreapp2.0/_._ | 0 .../lib/netstandard2.0/System.Buffers.dll | Bin 0 -> 23832 bytes .../lib/netstandard2.0/System.Buffers.xml | 173 + .../lib/netstandard2.1/_._ | 0 Packages/System.Memory.4.6.3/.signature.p7s | Bin 0 -> 25616 bytes Packages/System.Memory.4.6.3/Icon.png | Bin 0 -> 7006 bytes Packages/System.Memory.4.6.3/PACKAGE.md | 29 + .../System.Memory.4.6.3.nupkg | Bin 0 -> 192935 bytes .../net461/System.Memory.targets | 6 + .../buildTransitive/net462/_._ | 0 .../lib/net462/System.Memory.dll | Bin 0 -> 145200 bytes .../lib/net462/System.Memory.xml | 3489 +++++ .../System.Memory.4.6.3/lib/netcoreapp2.1/_._ | 0 .../lib/netstandard2.0/System.Memory.dll | Bin 0 -> 145176 bytes .../lib/netstandard2.0/System.Memory.xml | 3489 +++++ .../lib/netstandard2.1/_._ | 0 .../.signature.p7s | Bin 0 -> 25618 bytes .../System.Numerics.Vectors.4.6.1/Icon.png | Bin 0 -> 7006 bytes .../System.Numerics.Vectors.4.6.1/PACKAGE.md | 25 + .../System.Numerics.Vectors.4.6.1.nupkg | Bin 0 -> 136872 bytes .../net461/System.Numerics.Vectors.targets | 6 + .../buildTransitive/net462/_._ | 0 .../lib/net462/System.Numerics.Vectors.dll | Bin 0 -> 110344 bytes .../lib/net462/System.Numerics.Vectors.xml | 3451 +++++ .../lib/netcoreapp2.0/_._ | 0 .../System.Numerics.Vectors.dll | Bin 0 -> 159496 bytes .../System.Numerics.Vectors.xml | 3451 +++++ .../lib/netstandard2.1/_._ | 0 .../.signature.p7s | Bin 0 -> 25618 bytes .../Icon.png | Bin 0 -> 7006 bytes .../PACKAGE.md | 17 + ...untime.CompilerServices.Unsafe.6.1.2.nupkg | Bin 0 -> 75106 bytes ...em.Runtime.CompilerServices.Unsafe.targets | 6 + .../buildTransitive/net462/_._ | 0 .../buildTransitive/net6.0/_._ | 0 ...em.Runtime.CompilerServices.Unsafe.targets | 6 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 19256 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 353 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 19232 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 353 + .../lib/net7.0/_._ | 0 ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 19256 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 353 + .../System.ValueTuple.4.6.1/.signature.p7s | Bin 0 -> 25616 bytes Packages/System.ValueTuple.4.6.1/Icon.png | Bin 0 -> 7006 bytes Packages/System.ValueTuple.4.6.1/PACKAGE.md | 27 + .../System.ValueTuple.4.6.1.nupkg | Bin 0 -> 87142 bytes .../build/net471/System.ValueTuple.targets | 11 + .../net461/System.ValueTuple.targets | 6 + .../buildTransitive/net462/_._ | 0 .../net471/System.ValueTuple.targets | 11 + .../lib/net462/System.ValueTuple.dll | Bin 0 -> 75048 bytes .../lib/net462/System.ValueTuple.xml | 1299 ++ .../lib/net47/System.ValueTuple.dll | Bin 0 -> 19752 bytes .../lib/net47/System.ValueTuple.xml | 1299 ++ .../System.ValueTuple.4.6.1/lib/net471/_._ | 0 .../lib/netcoreapp2.0/_._ | 0 .../lib/netstandard2.0/_._ | 0 Packages/ZLinq.1.5.6/.signature.p7s | Bin 0 -> 12981 bytes Packages/ZLinq.1.5.6/Icon.png | Bin 0 -> 3185 bytes Packages/ZLinq.1.5.6/README.md | 1096 ++ Packages/ZLinq.1.5.6/ZLinq.1.5.6.nupkg | Bin 0 -> 539577 bytes Packages/ZLinq.1.5.6/lib/net10.0/ZLinq.dll | Bin 0 -> 257024 bytes Packages/ZLinq.1.5.6/lib/net10.0/ZLinq.xml | 110 + Packages/ZLinq.1.5.6/lib/net8.0/ZLinq.dll | Bin 0 -> 257024 bytes Packages/ZLinq.1.5.6/lib/net8.0/ZLinq.xml | 110 + Packages/ZLinq.1.5.6/lib/net9.0/ZLinq.dll | Bin 0 -> 258560 bytes Packages/ZLinq.1.5.6/lib/net9.0/ZLinq.xml | 110 + .../ZLinq.1.5.6/lib/netstandard2.0/ZLinq.dll | Bin 0 -> 247808 bytes .../ZLinq.1.5.6/lib/netstandard2.0/ZLinq.xml | 598 + .../ZLinq.1.5.6/lib/netstandard2.1/ZLinq.dll | Bin 0 -> 246272 bytes .../ZLinq.1.5.6/lib/netstandard2.1/ZLinq.xml | 493 + Packages/manifest.json | 4 +- Packages/packages-lock.json | 7 + ProjectSettings/PackageManagerSettings.asset | 1 + packages.config | 10 + 236 files changed, 41978 insertions(+), 60 deletions(-) rename Assets/Darkmatter/Code/Core/Contracts/Features/{Drawing.meta => DrawingCatalog.meta} (100%) create mode 100644 Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs create mode 100644 Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs.meta rename Assets/Darkmatter/Code/Core/Contracts/Features/{Drawing => DrawingCatalog}/IDrawingTemplate.cs (77%) rename Assets/Darkmatter/Code/Core/Contracts/Features/{Drawing => DrawingCatalog}/IDrawingTemplate.cs.meta (100%) rename Assets/Darkmatter/Code/Core/Contracts/Features/{Drawing => DrawingCatalog}/IDrawingTemplateCatalog.cs (64%) rename Assets/Darkmatter/Code/Core/Contracts/Features/{Drawing => DrawingCatalog}/IDrawingTemplateCatalog.cs.meta (100%) create mode 100644 Assets/Darkmatter/Code/Core/Contracts/Features/Progression.meta create mode 100644 Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs create mode 100644 Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs create mode 100644 Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Signals.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Signals/Features.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs create mode 100644 Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring.meta create mode 100644 Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs create mode 100644 Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs.meta rename Assets/Darkmatter/Code/Core/Data/Static/Features/{Drawing.meta => DrawingTemplate.meta} (100%) rename Assets/Darkmatter/Code/Core/Data/Static/Features/{Drawing => DrawingTemplate}/DrawingTemplateSO.cs (81%) rename Assets/Darkmatter/Code/Core/Data/Static/Features/{Drawing => DrawingTemplate}/DrawingTemplateSO.cs.meta (100%) create mode 100644 Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder.meta rename Assets/Darkmatter/Code/Core/Data/Static/Features/{Drawing => ShapeBuilder}/ShapeSO.cs (83%) rename Assets/Darkmatter/Code/Core/Data/Static/Features/{Drawing => ShapeBuilder}/ShapeSO.cs.meta (100%) create mode 100644 Assets/Darkmatter/Code/Core/Enums/Features.meta create mode 100644 Assets/Darkmatter/Code/Core/Enums/Features/Progression.meta create mode 100644 Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs create mode 100644 Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Installers.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Systems.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Installers.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Systems.meta create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs create mode 100644 Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs.meta rename Assets/Darkmatter/Code/Features/History/Installers/{HistoryServiceModule.cs => HistoryFeatureModule.cs} (89%) rename Assets/Darkmatter/Code/Features/History/Installers/{HistoryServiceModule.cs.meta => HistoryFeatureModule.cs.meta} (100%) create mode 100644 Assets/Darkmatter/Code/Features/Progression.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef create mode 100644 Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Installers.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs create mode 100644 Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Systems.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs create mode 100644 Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs.meta create mode 100644 Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs create mode 100644 Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs.meta rename Assets/Darkmatter/Code/Libs/Installers/{IServiceModule.cs => IModule.cs} (77%) rename Assets/Darkmatter/Code/Libs/Installers/{IServiceModule.cs.meta => IModule.cs.meta} (100%) rename Assets/Darkmatter/Code/Services/Analytics/Installers/{AnalyticsServiceModule.cs => AnalyticsModule.cs} (82%) rename Assets/Darkmatter/Code/Services/Analytics/Installers/{AnalyticsServiceModule.cs.meta => AnalyticsModule.cs.meta} (100%) rename Assets/Darkmatter/Code/Services/Camera/Installers/{CameraServiceModule.cs => CameraModule.cs} (93%) rename Assets/Darkmatter/Code/Services/Camera/Installers/{CameraServiceModule.cs.meta => CameraModule.cs.meta} (100%) rename Assets/Darkmatter/Code/Services/Capture/Installers/{CaptureServiceModule.cs => CaptureModule.cs} (83%) rename Assets/Darkmatter/Code/Services/Capture/Installers/{CaptureServiceModule.cs.meta => CaptureModule.cs.meta} (100%) rename Assets/Darkmatter/Code/Services/Gallery/Installers/{GalleryServiceModule.cs => GalleryModule.cs} (82%) rename Assets/Darkmatter/Code/Services/Gallery/Installers/{GalleryServiceModule.cs.meta => GalleryModule.cs.meta} (100%) create mode 100644 Assets/Darkmatter/Data/PlayerPrefs.meta create mode 100644 Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset create mode 100644 Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset.meta create mode 100644 Assets/NuGet.config create mode 100644 Assets/NuGet.config.meta create mode 100644 Assets/Packages.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/.signature.p7s create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/README.md create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/README.md.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml.meta create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png create mode 100644 Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png.meta create mode 100644 Assets/Packages/ZLinq.1.5.6.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/.signature.p7s create mode 100644 Assets/Packages/ZLinq.1.5.6/Icon.png create mode 100644 Assets/Packages/ZLinq.1.5.6/Icon.png.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/README.md create mode 100644 Assets/Packages/ZLinq.1.5.6/README.md.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/ZLinq.nuspec create mode 100644 Assets/Packages/ZLinq.1.5.6/ZLinq.nuspec.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/lib.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/lib/netstandard2.1.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.dll create mode 100644 Assets/Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.dll.meta create mode 100644 Assets/Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.xml create mode 100644 Assets/Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.xml.meta create mode 100644 Assets/csc.rsp create mode 100644 Assets/csc.rsp.meta create mode 100644 Assets/packages.config create mode 100644 Assets/packages.config.meta create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/.signature.p7s create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/Icon.png create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/Microsoft.Bcl.Memory.10.0.5.nupkg create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/PACKAGE.md create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/THIRD-PARTY-NOTICES.TXT create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/buildTransitive/net461/Microsoft.Bcl.Memory.targets create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/buildTransitive/net462/_._ create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/buildTransitive/net8.0/_._ create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/buildTransitive/netcoreapp2.0/Microsoft.Bcl.Memory.targets create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net10.0/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net10.0/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net462/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net462/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net8.0/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net8.0/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net9.0/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/net9.0/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/netstandard2.0/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/netstandard2.0/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/netstandard2.1/Microsoft.Bcl.Memory.dll create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/lib/netstandard2.1/Microsoft.Bcl.Memory.xml create mode 100755 Packages/Microsoft.Bcl.Memory.10.0.5/useSharedDesignerContext.txt create mode 100755 Packages/System.Buffers.4.6.1/.signature.p7s create mode 100755 Packages/System.Buffers.4.6.1/Icon.png create mode 100755 Packages/System.Buffers.4.6.1/PACKAGE.md create mode 100755 Packages/System.Buffers.4.6.1/System.Buffers.4.6.1.nupkg create mode 100755 Packages/System.Buffers.4.6.1/buildTransitive/net461/System.Buffers.targets create mode 100755 Packages/System.Buffers.4.6.1/buildTransitive/net462/_._ create mode 100755 Packages/System.Buffers.4.6.1/lib/net462/System.Buffers.dll create mode 100755 Packages/System.Buffers.4.6.1/lib/net462/System.Buffers.xml create mode 100755 Packages/System.Buffers.4.6.1/lib/netcoreapp2.0/_._ create mode 100755 Packages/System.Buffers.4.6.1/lib/netstandard2.0/System.Buffers.dll create mode 100755 Packages/System.Buffers.4.6.1/lib/netstandard2.0/System.Buffers.xml create mode 100755 Packages/System.Buffers.4.6.1/lib/netstandard2.1/_._ create mode 100755 Packages/System.Memory.4.6.3/.signature.p7s create mode 100755 Packages/System.Memory.4.6.3/Icon.png create mode 100755 Packages/System.Memory.4.6.3/PACKAGE.md create mode 100755 Packages/System.Memory.4.6.3/System.Memory.4.6.3.nupkg create mode 100755 Packages/System.Memory.4.6.3/buildTransitive/net461/System.Memory.targets create mode 100755 Packages/System.Memory.4.6.3/buildTransitive/net462/_._ create mode 100755 Packages/System.Memory.4.6.3/lib/net462/System.Memory.dll create mode 100755 Packages/System.Memory.4.6.3/lib/net462/System.Memory.xml create mode 100755 Packages/System.Memory.4.6.3/lib/netcoreapp2.1/_._ create mode 100755 Packages/System.Memory.4.6.3/lib/netstandard2.0/System.Memory.dll create mode 100755 Packages/System.Memory.4.6.3/lib/netstandard2.0/System.Memory.xml create mode 100755 Packages/System.Memory.4.6.3/lib/netstandard2.1/_._ create mode 100755 Packages/System.Numerics.Vectors.4.6.1/.signature.p7s create mode 100755 Packages/System.Numerics.Vectors.4.6.1/Icon.png create mode 100755 Packages/System.Numerics.Vectors.4.6.1/PACKAGE.md create mode 100755 Packages/System.Numerics.Vectors.4.6.1/System.Numerics.Vectors.4.6.1.nupkg create mode 100755 Packages/System.Numerics.Vectors.4.6.1/buildTransitive/net461/System.Numerics.Vectors.targets create mode 100755 Packages/System.Numerics.Vectors.4.6.1/buildTransitive/net462/_._ create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/net462/System.Numerics.Vectors.dll create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/net462/System.Numerics.Vectors.xml create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/netcoreapp2.0/_._ create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/netstandard2.0/System.Numerics.Vectors.dll create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/netstandard2.0/System.Numerics.Vectors.xml create mode 100755 Packages/System.Numerics.Vectors.4.6.1/lib/netstandard2.1/_._ create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/.signature.p7s create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/Icon.png create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/PACKAGE.md create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/System.Runtime.CompilerServices.Unsafe.6.1.2.nupkg create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/buildTransitive/net461/System.Runtime.CompilerServices.Unsafe.targets create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/buildTransitive/net462/_._ create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/buildTransitive/net6.0/_._ create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/net462/System.Runtime.CompilerServices.Unsafe.dll create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/net462/System.Runtime.CompilerServices.Unsafe.xml create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/net7.0/_._ create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100755 Packages/System.Runtime.CompilerServices.Unsafe.6.1.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100755 Packages/System.ValueTuple.4.6.1/.signature.p7s create mode 100755 Packages/System.ValueTuple.4.6.1/Icon.png create mode 100755 Packages/System.ValueTuple.4.6.1/PACKAGE.md create mode 100755 Packages/System.ValueTuple.4.6.1/System.ValueTuple.4.6.1.nupkg create mode 100755 Packages/System.ValueTuple.4.6.1/build/net471/System.ValueTuple.targets create mode 100755 Packages/System.ValueTuple.4.6.1/buildTransitive/net461/System.ValueTuple.targets create mode 100755 Packages/System.ValueTuple.4.6.1/buildTransitive/net462/_._ create mode 100755 Packages/System.ValueTuple.4.6.1/buildTransitive/net471/System.ValueTuple.targets create mode 100755 Packages/System.ValueTuple.4.6.1/lib/net462/System.ValueTuple.dll create mode 100755 Packages/System.ValueTuple.4.6.1/lib/net462/System.ValueTuple.xml create mode 100755 Packages/System.ValueTuple.4.6.1/lib/net47/System.ValueTuple.dll create mode 100755 Packages/System.ValueTuple.4.6.1/lib/net47/System.ValueTuple.xml create mode 100755 Packages/System.ValueTuple.4.6.1/lib/net471/_._ create mode 100755 Packages/System.ValueTuple.4.6.1/lib/netcoreapp2.0/_._ create mode 100755 Packages/System.ValueTuple.4.6.1/lib/netstandard2.0/_._ create mode 100755 Packages/ZLinq.1.5.6/.signature.p7s create mode 100755 Packages/ZLinq.1.5.6/Icon.png create mode 100755 Packages/ZLinq.1.5.6/README.md create mode 100755 Packages/ZLinq.1.5.6/ZLinq.1.5.6.nupkg create mode 100755 Packages/ZLinq.1.5.6/lib/net10.0/ZLinq.dll create mode 100755 Packages/ZLinq.1.5.6/lib/net10.0/ZLinq.xml create mode 100755 Packages/ZLinq.1.5.6/lib/net8.0/ZLinq.dll create mode 100755 Packages/ZLinq.1.5.6/lib/net8.0/ZLinq.xml create mode 100755 Packages/ZLinq.1.5.6/lib/net9.0/ZLinq.dll create mode 100755 Packages/ZLinq.1.5.6/lib/net9.0/ZLinq.xml create mode 100755 Packages/ZLinq.1.5.6/lib/netstandard2.0/ZLinq.dll create mode 100755 Packages/ZLinq.1.5.6/lib/netstandard2.0/ZLinq.xml create mode 100755 Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.dll create mode 100755 Packages/ZLinq.1.5.6/lib/netstandard2.1/ZLinq.xml create mode 100644 packages.config diff --git a/Assets/Darkmatter/Code/App/LifetimeScopes/BaseLifetimeScope.cs b/Assets/Darkmatter/Code/App/LifetimeScopes/BaseLifetimeScope.cs index 70d3238..0aa3264 100644 --- a/Assets/Darkmatter/Code/App/LifetimeScopes/BaseLifetimeScope.cs +++ b/Assets/Darkmatter/Code/App/LifetimeScopes/BaseLifetimeScope.cs @@ -13,7 +13,7 @@ namespace Darkmatter.App.LifetimeScopes { foreach (var module in serviceModules) { - if (module is IServiceModule serviceModule) + if (module is IModule serviceModule) serviceModule.Register(builder); } } diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Coloring/IColorPalette.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/Coloring/IColorPalette.cs index 2972e4e..fb1cb12 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/Coloring/IColorPalette.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Coloring/IColorPalette.cs @@ -6,6 +6,6 @@ namespace Darkmatter.Core.Contracts.Features.Coloring public interface IColorPalette { string Id { get; } - IReadOnlyList Colors { get; } + List Colors { get; } } } \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Contracts/Features/Drawing.meta rename to Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog.meta diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs new file mode 100644 index 0000000..11111e5 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace Darkmatter.Core.Contracts.Features.DrawingCatalog; + +public interface IDrawingCatalogController +{ + IReadOnlyList VisibleIds { get; } + event Action ListChanged; + UniTask InitializeAsync(CancellationToken ct); + void OnTemplateSelected(string id); +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs.meta new file mode 100644 index 0000000..4b1bba2 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b0732a5de2a84833ab4d3252d9e22851 +timeCreated: 1779881997 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplate.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplate.cs similarity index 77% rename from Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplate.cs rename to Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplate.cs index 904f246..28f5769 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplate.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplate.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using Darkmatter.Core.Data.Dynamic.Features.Coloring; +using Darkmatter.Core.Data.Static.Features.ShapeBuilder; using UnityEngine; -namespace Darkmatter.Core.Contracts.Features.Drawing +namespace Darkmatter.Core.Contracts.Features.DrawingCatalog { public interface IDrawingTemplate { diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplate.cs.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplate.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplate.cs.meta rename to Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplate.cs.meta diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplateCatalog.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplateCatalog.cs similarity index 64% rename from Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplateCatalog.cs rename to Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplateCatalog.cs index 67b9a19..0f2e6be 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplateCatalog.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplateCatalog.cs @@ -2,15 +2,15 @@ using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; -namespace Darkmatter.Core.Contracts.Features.Drawing +namespace Darkmatter.Core.Contracts.Features.DrawingCatalog { public interface IDrawingTemplateCatalog { - UniTask InitializeAsync(); + UniTask FetchAsync(); IReadOnlyList AllTemplateIds { get; } UniTask GetThumbnailAsync(string id); UniTask LoadAsync(string id); - void Release(string id); - string NextUnseen(string currentId); + void ReleaseAll(); + string GetNextTemplate(string currentId); } } \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplateCatalog.cs.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplateCatalog.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Contracts/Features/Drawing/IDrawingTemplateCatalog.cs.meta rename to Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingTemplateCatalog.cs.meta diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Progression.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression.meta new file mode 100644 index 0000000..6c06d61 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33ac9f869ed6a48c1a97be5aaad4953d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs new file mode 100644 index 0000000..ebe8d11 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Data.Dynamic.Features.Progression; +using UnityEngine; + +// Code/Core/Contracts/Features/Progression/IProgressionSystem.cs +namespace Darkmatter.Core.Contracts.Features.Progression +{ + public interface IProgressionSystem + { + UniTask LoadAsync(); + UniTask SaveAsync(); + IReadOnlyCollection CompletedTemplateIds { get; } + void MarkCompleted(string templateId); + + DrawingProgress? GetProgress(string templateId); + UniTask SaveProgressAsync(DrawingProgress progress); + UniTask SaveProgressAsync(DrawingProgress progress, byte[] thumbnailPng); + UniTask ClearProgressAsync(string templateId); + + bool IsCompleted(string templateId); + + UniTask GetCachedThumbnailAsync(string templateId); + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs.meta new file mode 100644 index 0000000..fa05e43 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Progression/IProgressionSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 01c78ae114b2e4de08c195481bb84875 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression.meta b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression.meta new file mode 100644 index 0000000..ff39310 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 690eecbb6b1914669ab26662e2cc6a98 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs new file mode 100644 index 0000000..a3c682b --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using Darkmatter.Core.Enums.Features.Progression; +using UnityEngine; + +namespace Darkmatter.Core.Data.Dynamic.Features.Progression +{ + [Serializable] + public struct DrawingProgress + { + public string templateId; + public DrawingPhase phase; + public List SnappedPieces; + public List RegionColors; + public bool hasThumbnail; + + public bool hasBeenCompleted; + public int completionCount; + + public DateTime UpdatedUtc; + public DateTime? FirstCompletedUtc; + + public DrawingProgress(string templateId, DrawingPhase phase, List snappedPieces, + List regionColors, bool hasThumbnail, bool hasBeenCompleted, + int completionCount, DateTime updatedUtc, DateTime? firstCompletedUtc) + { + this.templateId = templateId; + this.phase = phase; + SnappedPieces = snappedPieces; + RegionColors = regionColors; + this.hasThumbnail = hasThumbnail; + this.hasBeenCompleted = hasBeenCompleted; + this.completionCount = completionCount; + UpdatedUtc = updatedUtc; + FirstCompletedUtc = firstCompletedUtc; + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs.meta b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs.meta new file mode 100644 index 0000000..37786c1 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/DrawingProgress.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 26d8ea985632441b09965ff3dc2f6bd7 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs new file mode 100644 index 0000000..d01aad4 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Darkmatter.Core.Data.Dynamic.Features.Progression +{ + [Serializable] + public struct ProgressionRootDto + { + public List records; + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs.meta b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs.meta new file mode 100644 index 0000000..66cddfa --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/ProgressionRootDto.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3c8f422a1719468387c90bdad95cf992 +timeCreated: 1779887245 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs new file mode 100644 index 0000000..ddc78d1 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs @@ -0,0 +1,11 @@ +using System; + +namespace Darkmatter.Core.Data.Dynamic.Features.Progression +{ + [Serializable] + public struct RegionColorEntry + { + public string regionId; + public float r, g, b, a; + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs.meta b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs.meta new file mode 100644 index 0000000..2902b96 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Dynamic/Features/Progression/RegionColorEntry.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 659d6e472d07425b86684258dda5644e +timeCreated: 1779886727 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Signals.meta b/Assets/Darkmatter/Code/Core/Data/Signals.meta new file mode 100644 index 0000000..30c0147 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 205ffc93dd2bd470f9e0da53a9d65909 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features.meta b/Assets/Darkmatter/Code/Core/Data/Signals/Features.meta new file mode 100644 index 0000000..b1911ed --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f1eaf2d35f914e3d803f2549f298938 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog.meta b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog.meta new file mode 100644 index 0000000..6a919ce --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba28845dcdb22487a992eef060351aaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs new file mode 100644 index 0000000..e205883 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs @@ -0,0 +1,4 @@ +namespace Darkmatter.Core.Data.Signals.Features.Drawing +{ + public record struct DrawingSelectedSignal(string TemplateId); +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs.meta b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs.meta new file mode 100644 index 0000000..6c361a3 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/DrawingSelectedSignal.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1d6dcdc9678a8433d858eb905dbeeede \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring.meta new file mode 100644 index 0000000..a010a17 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3953b868e0bd442f781b75f449885c22 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs new file mode 100644 index 0000000..da08d90 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Darkmatter.Core.Contracts.Features.Coloring; +using UnityEngine; + +namespace Darkmatter.Core.Data.Static.Features.Coloring +{ + [CreateAssetMenu(menuName = "Darkmatter/Coloring/New Color Palette")] + public class ColorPaletteSO : ScriptableObject, IColorPalette + { + [field: SerializeField] public string Id { get; private set; } + [field: SerializeField] public List Colors { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs.meta new file mode 100644 index 0000000..a65bf23 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/Coloring/ColorPaletteSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e0a4931af72ae4456a42012c6fc82eb6 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing.meta rename to Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate.meta diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/DrawingTemplateSO.cs b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs similarity index 81% rename from Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/DrawingTemplateSO.cs rename to Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs index 97ab4c4..1159911 100644 --- a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/DrawingTemplateSO.cs +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; -using Darkmatter.Core.Contracts.Features.Drawing; +using Darkmatter.Core.Contracts.Features.DrawingCatalog; using Darkmatter.Core.Data.Dynamic.Features.Coloring; +using Darkmatter.Core.Data.Static.Features.ShapeBuilder; using UnityEngine; -namespace Darkmatter.Core.Data.Static.Features.Drawing +namespace Darkmatter.Core.Data.Static.Features.DrawingTemplate { [CreateAssetMenu(menuName = "Darkmatter/Drawing/New Drawing Template")] public class DrawingTemplateSO : ScriptableObject, IDrawingTemplate diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/DrawingTemplateSO.cs.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/DrawingTemplateSO.cs.meta rename to Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs.meta diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder.meta new file mode 100644 index 0000000..3a112cf --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 58192c2a0a784950851647d3f0130ad1 +timeCreated: 1779882018 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/ShapeSO.cs b/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder/ShapeSO.cs similarity index 83% rename from Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/ShapeSO.cs rename to Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder/ShapeSO.cs index c824689..219e650 100644 --- a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/ShapeSO.cs +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder/ShapeSO.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace Darkmatter.Core +namespace Darkmatter.Core.Data.Static.Features.ShapeBuilder { [CreateAssetMenu(fileName = "ShapeSO", menuName = "Darkmatter/Drawing/New Shape")] public class ShapeSO : ScriptableObject diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/ShapeSO.cs.meta b/Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder/ShapeSO.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Core/Data/Static/Features/Drawing/ShapeSO.cs.meta rename to Assets/Darkmatter/Code/Core/Data/Static/Features/ShapeBuilder/ShapeSO.cs.meta diff --git a/Assets/Darkmatter/Code/Core/Enums/Features.meta b/Assets/Darkmatter/Code/Core/Enums/Features.meta new file mode 100644 index 0000000..d61ec77 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Enums/Features.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4f15fee48e26465ca8a0f61bb616940 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Enums/Features/Progression.meta b/Assets/Darkmatter/Code/Core/Enums/Features/Progression.meta new file mode 100644 index 0000000..0c273e3 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Enums/Features/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed8f13f1e3a5c49d992a8de59bb9ced7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs b/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs new file mode 100644 index 0000000..78af891 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs @@ -0,0 +1,8 @@ +namespace Darkmatter.Core.Enums.Features.Progression +{ + public enum DrawingPhase + { + ShapeBuilding, + Coloring, + } +} diff --git a/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs.meta b/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs.meta new file mode 100644 index 0000000..30963fa --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Enums/Features/Progression/DrawingPhase.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3ece528f850c24e0f8d3c33a732cc8c6 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog.meta new file mode 100644 index 0000000..58b73a4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1543e11e36b1a414588e088a16a3e88e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef b/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef new file mode 100644 index 0000000..0c2bb85 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Features.DrawingCatalog", + "rootNamespace": "Darkmatter.Features.DrawingCatalog", + "references": [ + "GUID:6a0a834eb41764f12ba55c3fb04a40cb", + "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", + "GUID:b4c9f7fbf1e144933a1797dc208ece5f", + "GUID:b0214a6008ed146ff8f122a6a9c2f6cc", + "GUID:f51ebe6a0ceec4240a699833d6309b23" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef.meta new file mode 100644 index 0000000..e60dade --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Features.DrawingCatalog.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eb9b7ee4936ff42bebd83ca110182103 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers.meta new file mode 100644 index 0000000..c53e311 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 364ed66782700401dbf48ad43c2792aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs new file mode 100644 index 0000000..00a8ff4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs @@ -0,0 +1,21 @@ +using Darkmatter.Core.Contracts.Features.DrawingCatalog; +using Darkmatter.Features.DrawingCatalog.Systems; +using Darkmatter.Libs.Installers; +using UnityEngine; +using VContainer; +using VContainer.Unity; + +namespace Darkmatter.Features.DrawingCatalog.Installers +{ + public class DrawingCatalogFeatureModule : MonoBehaviour, IModule + { + [SerializeField] private DrawingCatalogView drawingCatalogView; + + public void Register(IContainerBuilder builder) + { + builder.Register(Lifetime.Singleton); + if(drawingCatalogView != null) + builder.RegisterEntryPoint().WithParameter(drawingCatalogView); + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs.meta new file mode 100644 index 0000000..db075f2 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Installers/DrawingCatalogFeatureModule.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a27ff086c35c847439a25f41463be16f \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems.meta new file mode 100644 index 0000000..dc67fc5 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 387876bf9c3cf4aa58cefa4845801ca1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs new file mode 100644 index 0000000..e5e62fa --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.DrawingCatalog; +using Darkmatter.Core.Contracts.Features.Progression; +using Darkmatter.Core.Data.Signals.Features.Drawing; +using Darkmatter.Libs.Observer; +using ZLinq; + +namespace Darkmatter.Features.DrawingCatalog.Systems; + +public sealed class DrawingCatalogController : IDrawingCatalogController +{ + private readonly IDrawingTemplateCatalog _catalog; + private readonly IEventBus _bus; + private readonly IProgressionSystem _progression; + + private readonly List _visible = new(); + public IReadOnlyList VisibleIds => _visible; + public event Action ListChanged; + + public DrawingCatalogController( + IDrawingTemplateCatalog catalog, + IProgressionSystem progression, + IEventBus bus) + { + _catalog = catalog; + _progression = progression; + _bus = bus; + } + + public async UniTask InitializeAsync(CancellationToken ct) + { + await _catalog.FetchAsync(); + Refresh(); + } + + public void OnTemplateSelected(string id) + { + _bus.Publish(new DrawingSelectedSignal(id)); + } + + private void Refresh() + { + _visible.Clear(); + var all = _catalog.AllTemplateIds; + foreach (var id in all) + if (!_progression.CompletedTemplateIds.AsValueEnumerable().Contains(id)) + _visible.Add(id); + foreach (var id in all) + if (_progression.CompletedTemplateIds.AsValueEnumerable().Contains(id)) + _visible.Add(id); + ListChanged?.Invoke(); + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs.meta new file mode 100644 index 0000000..925d3b4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1252b78470d594aa58188c32f552c52a \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI.meta new file mode 100644 index 0000000..f1bda9f --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae468b5d4d3624234848298a64d4c1e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs new file mode 100644 index 0000000..0baf566 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace Darkmatter.Features.DrawingCatalog; + +public struct CatalogItemVM +{ + public string Id { get; } + public Sprite Thumbnail { get; } + + public CatalogItemVM(string id, Sprite thumbnail) + { + Id = id; + Thumbnail = thumbnail; + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs.meta new file mode 100644 index 0000000..0c7b6d6 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/CatalogItemVM.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7b4274f9a3304610b13c6d01280139dc +timeCreated: 1779881383 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs new file mode 100644 index 0000000..88fa867 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs @@ -0,0 +1,18 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Darkmatter.Features.DrawingCatalog; + +public class DrawingCatalogButton : MonoBehaviour +{ + public string Id { get; private set; } + [SerializeField] private Image thumbnail; + [SerializeField] private Button button; + + public void Initialize(string id,Sprite thumbnailSprite, UnityEngine.Events.UnityAction onClick) + { + Id = id; + thumbnail.sprite = thumbnailSprite; + button.onClick.AddListener(onClick); + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs.meta new file mode 100644 index 0000000..2d5f08f --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: da23f33bd6fc4bf99f251714180406f1 +timeCreated: 1779880745 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs new file mode 100644 index 0000000..5c7ed91 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.DrawingCatalog; +using Darkmatter.Features.DrawingCatalog.Systems; +using VContainer.Unity; + +namespace Darkmatter.Features.DrawingCatalog +{ + public class DrawingCatalogPresenter : IStartable, IDisposable + { + private readonly DrawingCatalogView _view; + private readonly IDrawingCatalogController _controller; + private readonly IDrawingTemplateCatalog _catalog; + private readonly CancellationTokenSource _cts = new(); + + public DrawingCatalogPresenter(DrawingCatalogView view, DrawingCatalogController controller, + IDrawingTemplateCatalog catalog) + { + _view = view; + _controller = controller; + _catalog = catalog; + } + + public void Start() + { + _view.OnItemClicked += OnItemClicked; + _controller.ListChanged += OnListChanged; + } + + private void OnItemClicked(string id) => + _controller.OnTemplateSelected(id); + + private void OnListChanged() => + RefreshAsync(_cts.Token).Forget(); + + private async UniTask RefreshAsync(CancellationToken ct) + { + var ids = _controller.VisibleIds; + var vms = new List(ids.Count); + foreach (var id in ids) + { + if (ct.IsCancellationRequested) return; + var thumb = await _catalog.GetThumbnailAsync(id); + vms.Add(new CatalogItemVM(id, thumb)); + } + + if (ct.IsCancellationRequested) return; + _view.SetItems(vms); + } + + public void Dispose() + { + _view.OnItemClicked -= OnItemClicked; + _controller.ListChanged -= OnListChanged; + _cts.Cancel(); + _cts.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs.meta new file mode 100644 index 0000000..9c7f89c --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0e2adf581811040fd86a5cd0d11cdca0 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs new file mode 100644 index 0000000..9936aaf --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Pool; + +namespace Darkmatter.Features.DrawingCatalog +{ + public class DrawingCatalogView : MonoBehaviour + { + [SerializeField] private RectTransform content; + [SerializeField] private DrawingCatalogButton buttonPrefab; + private readonly List _buttons = new(); + + public event Action OnItemClicked; + + public void SetItems(IReadOnlyList items) + { + while (_buttons.Count < items.Count) + { + var button = Instantiate(buttonPrefab, content); + var item = items[_buttons.Count]; + button.Initialize(item.Id, item.Thumbnail, + () => { OnItemClicked?.Invoke(item.Id); }); + _buttons.Add(button); + } + + while (_buttons.Count > items.Count) + { + var last = _buttons[^1]; + _buttons.RemoveAt(_buttons.Count - 1); + Destroy(last.gameObject); + } + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs.meta b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs.meta new file mode 100644 index 0000000..b284b3a --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 37f3d6f10bf1349a382f7ff96cc510b7 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate.meta new file mode 100644 index 0000000..006ec37 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd0e94708f3eb4fafbc7048b8c1fb5d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef b/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef new file mode 100644 index 0000000..52c3213 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Features.DrawingTemplates", + "rootNamespace": "Darkmatter.Features.DrawingTemplates", + "references": [ + "GUID:6a0a834eb41764f12ba55c3fb04a40cb", + "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", + "GUID:efcaa22887a6b4471829c3b3878147a2", + "GUID:b0214a6008ed146ff8f122a6a9c2f6cc", + "GUID:f51ebe6a0ceec4240a699833d6309b23" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef.meta new file mode 100644 index 0000000..92c26c1 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Features.DrawingTemplates.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6a005d98aed1c4439bc4689802fa2e3b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers.meta new file mode 100644 index 0000000..b0420b0 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6935767e9490e43e299d8fc639db3c13 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs new file mode 100644 index 0000000..ba0af05 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs @@ -0,0 +1,16 @@ +using Darkmatter.Core.Contracts.Features.DrawingCatalog; +using Darkmatter.Features.DrawingTemplates.Systems; +using UnityEngine; +using Darkmatter.Libs.Installers; +using VContainer; + +namespace Darkmatter.Features.DrawingTemplates +{ + public class DrawingTemplateFeatureModule : MonoBehaviour, IModule + { + public void Register(IContainerBuilder builder) + { + builder.Register(Lifetime.Singleton); + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs.meta new file mode 100644 index 0000000..34862f1 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Installers/DrawingTemplateFeatureModule.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: aa578cd62ad074dbf91b5228c3ac667e \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems.meta new file mode 100644 index 0000000..35d4e54 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcb041f2ec610494198cc9b6a367d0f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs new file mode 100644 index 0000000..b9e1e9b --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.DrawingCatalog; +using Darkmatter.Core.Contracts.Features.Progression; +using Darkmatter.Core.Contracts.Services.Assets; +using Darkmatter.Core.Data.Static.Features.DrawingTemplate; +using UnityEngine; + +namespace Darkmatter.Features.DrawingTemplates.Systems +{ + public sealed class AddressableDrawingTemplateCatalog : IDrawingTemplateCatalog + { + private const string DrawingLabel = "drawing"; + + private readonly IAssetProviderService _assets; + private readonly IProgressionSystem _progression; + + private readonly List _allIds = new(); + private readonly Dictionary _byId = new(); + private bool _initialized; + + public IReadOnlyList AllTemplateIds => _allIds; + + public AddressableDrawingTemplateCatalog( + IAssetProviderService assets, + IProgressionSystem progression) + { + _assets = assets; + _progression = progression; + } + + public async UniTask FetchAsync() + { + if (_initialized) return; + + var templates = await _assets.LoadAssetsAsync( + key: DrawingLabel, + progress: null, + cancellationToken: CancellationToken.None); + + _allIds.Clear(); + _byId.Clear(); + foreach (var t in templates) + { + if (t == null || string.IsNullOrEmpty(t.Id)) continue; + _allIds.Add(t.Id); + _byId[t.Id] = t; + } + + _allIds.Sort(); + _initialized = true; + } + + public UniTask GetThumbnailAsync(string id) + { + if (!_byId.TryGetValue(id, out var t)) + throw new KeyNotFoundException($"Template '{id}' not in catalog. Did InitializeAsync run?"); + return UniTask.FromResult(t.DefaultThumbnail); + } + + public UniTask LoadAsync(string id) + { + if (_byId.TryGetValue(id, out var t)) + return UniTask.FromResult(t); + + return LoadIndividualAsync(id); + } + + private async UniTask LoadIndividualAsync(string id) + { + var t = await _assets.LoadAssetAsync( + id, progress: null, cancellationToken: CancellationToken.None); + if (t == null) + throw new KeyNotFoundException($"No drawing template at address '{id}'."); + _byId[id] = t; + if (!_allIds.Contains(id)) + { + _allIds.Add(id); + _allIds.Sort(); + } + + return t; + } + + public void ReleaseAll() + { + if (!_initialized) return; + _assets.UnloadAsset(DrawingLabel); + _byId.Clear(); + _allIds.Clear(); + _initialized = false; + } + + public string GetNextTemplate(string currentId) + { + if (_allIds.Count == 0) return null; + + int startIdx = currentId != null ? _allIds.IndexOf(currentId) : -1; + + for (int i = 1; i <= _allIds.Count; i++) + { + var idx = (startIdx + i) % _allIds.Count; + var candidate = _allIds[idx]; + if (!_progression.IsCompleted(candidate)) + return candidate; + } + + return _allIds[(startIdx + 1) % _allIds.Count]; + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs.meta b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs.meta new file mode 100644 index 0000000..a4f2ca4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/DrawingTemplate/Systems/AddressableDrawingTemplateCatalog.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: efec7b2f8603443098cb058487c51f2d \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/History/Installers/HistoryServiceModule.cs b/Assets/Darkmatter/Code/Features/History/Installers/HistoryFeatureModule.cs similarity index 89% rename from Assets/Darkmatter/Code/Features/History/Installers/HistoryServiceModule.cs rename to Assets/Darkmatter/Code/Features/History/Installers/HistoryFeatureModule.cs index 71e3a6e..024a0aa 100644 --- a/Assets/Darkmatter/Code/Features/History/Installers/HistoryServiceModule.cs +++ b/Assets/Darkmatter/Code/Features/History/Installers/HistoryFeatureModule.cs @@ -6,7 +6,7 @@ using VContainer.Unity; namespace Darkmatter.Features.History { - public class HistoryServiceModule : MonoBehaviour, IServiceModule + public class HistoryFeatureModule : MonoBehaviour, IModule { [SerializeField] private HistoryButtonsView historyButtonsView; diff --git a/Assets/Darkmatter/Code/Features/History/Installers/HistoryServiceModule.cs.meta b/Assets/Darkmatter/Code/Features/History/Installers/HistoryFeatureModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Features/History/Installers/HistoryServiceModule.cs.meta rename to Assets/Darkmatter/Code/Features/History/Installers/HistoryFeatureModule.cs.meta diff --git a/Assets/Darkmatter/Code/Features/Progression.meta b/Assets/Darkmatter/Code/Features/Progression.meta new file mode 100644 index 0000000..da288e9 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1eb9cf328d194c26af62c5ad5c37a9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef b/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef new file mode 100644 index 0000000..460a13b --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Features.Progression", + "rootNamespace": "Darkmatter.Features.Progression", + "references": [ + "GUID:6a0a834eb41764f12ba55c3fb04a40cb", + "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", + "GUID:564d11c0820a9455c8821cd85e9d0fd1", + "GUID:b0214a6008ed146ff8f122a6a9c2f6cc", + "GUID:f51ebe6a0ceec4240a699833d6309b23" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef.meta b/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef.meta new file mode 100644 index 0000000..5413749 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Features.Progression.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f0bb65a4e720b460289d630f2ebaf2d5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Progression/Installers.meta b/Assets/Darkmatter/Code/Features/Progression/Installers.meta new file mode 100644 index 0000000..42fc765 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Installers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 520a33089d7d04ebcbe196f3268669d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs b/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs new file mode 100644 index 0000000..b2414e8 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs @@ -0,0 +1,17 @@ +using Darkmatter.Core.Contracts.Features.Progression; +using Darkmatter.Features.Progression.Systems; +using Darkmatter.Libs.Installers; +using UnityEngine; +using VContainer; + +namespace Darkmatter.Features.Progression.Installers +{ + public class ProgressionFeatureModule : MonoBehaviour, IModule + { + public void Register(IContainerBuilder builder) + { + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs.meta b/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs.meta new file mode 100644 index 0000000..7fcb6e1 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Installers/ProgressionFeatureModule.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d0af7651133b54f398413a7c19dfc9bb \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Systems.meta b/Assets/Darkmatter/Code/Features/Progression/Systems.meta new file mode 100644 index 0000000..3e75548 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c84a26f46bcb491c882e6838679d54d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs new file mode 100644 index 0000000..39b2528 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Data.Dynamic.Features.Progression; +using Darkmatter.Libs.PlayerPrefs; +using UnityEngine; + +namespace Darkmatter.Features.Progression.Systems; + +public sealed class ProgressionRepository +{ + private const string ThumbnailsFolder = "thumbnails"; + + private readonly Dictionary _records = new(); + + public IEnumerable AllProgress() => _records.Values; + + public DrawingProgress? TryGet(string templateId) => + _records.TryGetValue(templateId, out var p) ? p : (DrawingProgress?)null; + + public UniTask LoadAsync() + { + _records.Clear(); + + var json = ProtectedPlayerPrefs.GetString(PlayerPrefsKeys.Progression, ""); + if (string.IsNullOrEmpty(json)) return UniTask.CompletedTask; + + ProgressionRootDto root; + try + { + root = JsonUtility.FromJson(json); + } + catch (Exception e) + { + Debug.LogError($"[Progression] Failed to parse saved root: {e}"); + return UniTask.CompletedTask; + } + + if (root.records != null) + { + foreach (var rec in root.records) + if (!string.IsNullOrEmpty(rec.templateId)) + _records[rec.templateId] = rec; + } + + return UniTask.CompletedTask; + } + + public UniTask SaveAsync() + { + FlushRoot(); + return UniTask.CompletedTask; + } + + public UniTask SaveProgressAsync(DrawingProgress p) + { + if (string.IsNullOrEmpty(p.templateId)) + throw new ArgumentException("DrawingProgress.templateId must be set."); + _records[p.templateId] = p; + FlushRoot(); + return UniTask.CompletedTask; + } + + public UniTask DeleteProgressAsync(string templateId) + { + if (string.IsNullOrEmpty(templateId)) return UniTask.CompletedTask; + _records.Remove(templateId); + FlushRoot(); + TryDeleteThumbnailFile(templateId); + return UniTask.CompletedTask; + } + + public async UniTask WriteThumbnailAsync(string templateId, byte[] png) + { + if (string.IsNullOrEmpty(templateId) || png == null || png.Length == 0) return; + + Directory.CreateDirectory(ThumbnailDirectory()); + var path = ThumbnailPath(templateId); + var tmp = path + ".tmp"; + + await UniTask.RunOnThreadPool(() => + { + File.WriteAllBytes(tmp, png); + if (File.Exists(path)) File.Delete(path); + File.Move(tmp, path); + }); + } + + public async UniTask LoadThumbnailAsync(string templateId) + { + if (string.IsNullOrEmpty(templateId)) return null; + var path = ThumbnailPath(templateId); + if (!File.Exists(path)) return null; + + byte[] bytes; + try + { + bytes = await UniTask.RunOnThreadPool(() => File.ReadAllBytes(path)); + } + catch (Exception e) + { + Debug.LogWarning($"[Progression] Failed reading thumbnail '{templateId}': {e.Message}"); + return null; + } + + await UniTask.SwitchToMainThread(); + var tex = new Texture2D(2, 2, TextureFormat.RGBA32, mipChain: false); + if (!tex.LoadImage(bytes)) + { + UnityEngine.Object.Destroy(tex); + return null; + } + + return tex; + } + + private void FlushRoot() + { + var root = new ProgressionRootDto + { + records = _records.Values.ToList(), + }; + var json = JsonUtility.ToJson(root); + ProtectedPlayerPrefs.SetString(PlayerPrefsKeys.Progression, json); + ProtectedPlayerPrefs.Save(); + } + + private static void TryDeleteThumbnailFile(string templateId) + { + try + { + var path = ThumbnailPath(templateId); + if (File.Exists(path)) File.Delete(path); + } + catch (Exception e) + { + Debug.LogWarning($"[Progression] Failed deleting thumbnail '{templateId}': {e.Message}"); + } + } + + private static string ThumbnailDirectory() => + Path.Combine(Application.persistentDataPath, ThumbnailsFolder); + + private static string ThumbnailPath(string templateId) => + Path.Combine(ThumbnailDirectory(), SafeFileName(templateId) + ".png"); + + private static string SafeFileName(string templateId) => + templateId.Replace('/', '_').Replace('\\', '_'); +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs.meta b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs.meta new file mode 100644 index 0000000..b6d7b17 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionRepository.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: da8d941d4aa246b495da1fe0fe4a3c37 +timeCreated: 1779883906 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs new file mode 100644 index 0000000..8eb1bc4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs @@ -0,0 +1,95 @@ +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.Progression; +using Darkmatter.Core.Data.Dynamic.Features.Progression; +using Darkmatter.Core.Enums.Features.Progression; +using Darkmatter.Features.Progression.Systems; +using UnityEngine; + +public class ProgressionSystem : IProgressionSystem +{ + private readonly ProgressionRepository _repository; + private readonly Dictionary _records = new(); + private readonly HashSet _completed = new(); + private readonly SemaphoreSlim _writeLock = new(1, 1); + + public IReadOnlyCollection CompletedTemplateIds => _completed; + + public ProgressionSystem(ProgressionRepository repository) + { + _repository = repository; + } + + public async UniTask LoadAsync() + { + await _repository.LoadAsync(); + _records.Clear(); + _completed.Clear(); + foreach (var p in _repository.AllProgress()) + { + _records[p.templateId] = p; + if (p.hasBeenCompleted) _completed.Add(p.templateId); + } + + } + + public UniTask SaveAsync() => _repository.SaveAsync(); + + public void MarkCompleted(string templateId) + { + if (!_records.TryGetValue(templateId, out var p)) + { + p = new DrawingProgress { templateId = templateId, phase = DrawingPhase.Coloring }; + } + + p.hasBeenCompleted = true; + p.completionCount += 1; + _records[templateId] = p; + _completed.Add(templateId); + } + + public DrawingProgress? GetProgress(string templateId) => + _records.TryGetValue(templateId, out var p) ? p : (DrawingProgress?)null; + + public UniTask SaveProgressAsync(DrawingProgress progress) => + SaveProgressAsync(progress, thumbnailPng: null); + + public async UniTask SaveProgressAsync(DrawingProgress progress, byte[] thumbnailPng) + { + await _writeLock.WaitAsync(); + try + { + _records[progress.templateId] = progress; + if (progress.hasBeenCompleted) _completed.Add(progress.templateId); + + await _repository.SaveProgressAsync(progress); + if (thumbnailPng != null) + await _repository.WriteThumbnailAsync(progress.templateId, thumbnailPng); + } + finally + { + _writeLock.Release(); + } + } + + public async UniTask ClearProgressAsync(string templateId) + { + await _writeLock.WaitAsync(); + try + { + _records.Remove(templateId); + _completed.Remove(templateId); + await _repository.DeleteProgressAsync(templateId); + } + finally + { + _writeLock.Release(); + } + } + + public bool IsCompleted(string templateId) => _completed.Contains(templateId); + + public UniTask GetCachedThumbnailAsync(string templateId) => + _repository.LoadThumbnailAsync(templateId); +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs.meta b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs.meta new file mode 100644 index 0000000..e49871a --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Progression/Systems/ProgressionSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0db29bbab0cba49e487a47c8884ee6da \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Libs/Installers/IServiceModule.cs b/Assets/Darkmatter/Code/Libs/Installers/IModule.cs similarity index 77% rename from Assets/Darkmatter/Code/Libs/Installers/IServiceModule.cs rename to Assets/Darkmatter/Code/Libs/Installers/IModule.cs index f466adc..353d510 100644 --- a/Assets/Darkmatter/Code/Libs/Installers/IServiceModule.cs +++ b/Assets/Darkmatter/Code/Libs/Installers/IModule.cs @@ -2,7 +2,7 @@ using VContainer; namespace Darkmatter.Libs.Installers { - public interface IServiceModule + public interface IModule { void Register(IContainerBuilder builder); } diff --git a/Assets/Darkmatter/Code/Libs/Installers/IServiceModule.cs.meta b/Assets/Darkmatter/Code/Libs/Installers/IModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Libs/Installers/IServiceModule.cs.meta rename to Assets/Darkmatter/Code/Libs/Installers/IModule.cs.meta diff --git a/Assets/Darkmatter/Code/Libs/PlayerPrefs/Runtime/PlayerPrefsKeys.cs b/Assets/Darkmatter/Code/Libs/PlayerPrefs/Runtime/PlayerPrefsKeys.cs index 5dd25b7..c9a2753 100644 --- a/Assets/Darkmatter/Code/Libs/PlayerPrefs/Runtime/PlayerPrefsKeys.cs +++ b/Assets/Darkmatter/Code/Libs/PlayerPrefs/Runtime/PlayerPrefsKeys.cs @@ -7,45 +7,7 @@ namespace Darkmatter.Libs.PlayerPrefs { public static class PlayerPrefsKeys { - /// Saves the achievements which the user has unlocked (String) - public const string Achievements = "Achievements"; - public const string LocalLedger = "LocalLedger"; - - public static class Accounts - { - public const string SavedAuthRequest = "Accounts.SavedAuthRequest"; - } - - public static class Economy - { - /// Saves user's hard Currency (Int) - public const string Gold = "Economy.Gold"; - /// Saves User's soft currency (Int) - public const string Rupees = "Economy.Rupees"; - } - - public static class Garage - { - /// Json of ids of the user owned buses (String) - public const string OwnedBusIds = "Garage.OwnedBusIds"; - /// Id of the Bus that the user has selected (String) - public const string SelectedBusId = "Garage.SelectedBusId"; - } - - public static class Progression - { - /// Saves the user's Level (Int) - public const string Level = "Progression.Level"; - /// Saves Xp of the user (Int) - public const string Xp = "Progression.Xp"; - } - - public static class SaveGame - { - /// Saves the users session 's json (String) - public const string Session = "SaveGame.Session"; - public const string Vehicle = "SaveGame.Vehicle"; - } - + /// Stores User's Progression Data (String) + public const string Progression = "Progression"; } } diff --git a/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsServiceModule.cs b/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsModule.cs similarity index 82% rename from Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsServiceModule.cs rename to Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsModule.cs index 676a4be..bf2ec49 100644 --- a/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsServiceModule.cs +++ b/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsModule.cs @@ -5,7 +5,7 @@ using VContainer.Unity; namespace Darkmatter.Services.Analytics { - public class AnalyticsServiceModule : MonoBehaviour, IServiceModule + public class AnalyticsModule : MonoBehaviour, IModule { public void Register(IContainerBuilder builder) { diff --git a/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsServiceModule.cs.meta b/Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsServiceModule.cs.meta rename to Assets/Darkmatter/Code/Services/Analytics/Installers/AnalyticsModule.cs.meta diff --git a/Assets/Darkmatter/Code/Services/Camera/Installers/CameraServiceModule.cs b/Assets/Darkmatter/Code/Services/Camera/Installers/CameraModule.cs similarity index 93% rename from Assets/Darkmatter/Code/Services/Camera/Installers/CameraServiceModule.cs rename to Assets/Darkmatter/Code/Services/Camera/Installers/CameraModule.cs index 8a0c48c..741d07d 100644 --- a/Assets/Darkmatter/Code/Services/Camera/Installers/CameraServiceModule.cs +++ b/Assets/Darkmatter/Code/Services/Camera/Installers/CameraModule.cs @@ -7,7 +7,7 @@ using CameraType = Darkmatter.Core.Enums.Services.Camera.CameraType; namespace Darkmatter.Services.Camera.Installers { - public class CameraServiceModule : MonoBehaviour, IServiceModule + public class CameraModule : MonoBehaviour, IModule { [SerializeField] private UnityEngine.Camera mainCamera; [SerializeField] private UnityEngine.Camera uiCamera; diff --git a/Assets/Darkmatter/Code/Services/Camera/Installers/CameraServiceModule.cs.meta b/Assets/Darkmatter/Code/Services/Camera/Installers/CameraModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Services/Camera/Installers/CameraServiceModule.cs.meta rename to Assets/Darkmatter/Code/Services/Camera/Installers/CameraModule.cs.meta diff --git a/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureServiceModule.cs b/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureModule.cs similarity index 83% rename from Assets/Darkmatter/Code/Services/Capture/Installers/CaptureServiceModule.cs rename to Assets/Darkmatter/Code/Services/Capture/Installers/CaptureModule.cs index 84a0b56..6acf64c 100644 --- a/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureServiceModule.cs +++ b/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureModule.cs @@ -5,7 +5,7 @@ using VContainer; namespace Darkmatter.Services.Capture.Installers { - public class CaptureServiceModule : MonoBehaviour, IServiceModule + public class CaptureModule : MonoBehaviour, IModule { public void Register(IContainerBuilder builder) { diff --git a/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureServiceModule.cs.meta b/Assets/Darkmatter/Code/Services/Capture/Installers/CaptureModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Services/Capture/Installers/CaptureServiceModule.cs.meta rename to Assets/Darkmatter/Code/Services/Capture/Installers/CaptureModule.cs.meta diff --git a/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryServiceModule.cs b/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryModule.cs similarity index 82% rename from Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryServiceModule.cs rename to Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryModule.cs index b3eb7e0..1d2f637 100644 --- a/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryServiceModule.cs +++ b/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryModule.cs @@ -5,7 +5,7 @@ using VContainer; namespace Darkmatter.Services.Gallery { - public class GalleryServiceModule : MonoBehaviour,IServiceModule + public class GalleryModule : MonoBehaviour,IModule { public void Register(IContainerBuilder builder) { diff --git a/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryServiceModule.cs.meta b/Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryModule.cs.meta similarity index 100% rename from Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryServiceModule.cs.meta rename to Assets/Darkmatter/Code/Services/Gallery/Installers/GalleryModule.cs.meta diff --git a/Assets/Darkmatter/Data/PlayerPrefs.meta b/Assets/Darkmatter/Data/PlayerPrefs.meta new file mode 100644 index 0000000..8d6b342 --- /dev/null +++ b/Assets/Darkmatter/Data/PlayerPrefs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0169c87b81494bd581c803370f13d66 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset b/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset new file mode 100644 index 0000000..dc87026 --- /dev/null +++ b/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8ac5d9908c8049e1a3c8b8ac108b5f5, type: 3} + m_Name: PlayerPrefsKeyRegistry + m_EditorClassIdentifier: Libs.PlayerPrefs::Darkmatter.Libs.PlayerPrefs.PlayerPrefsKeyRegistry + _entries: [] diff --git a/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset.meta b/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset.meta new file mode 100644 index 0000000..fc9da50 --- /dev/null +++ b/Assets/Darkmatter/Data/PlayerPrefs/PlayerPrefsKeyRegistry.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43227e22a3e2f44c5a6dc92729ba32e0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Scenes/Boot.unity b/Assets/Darkmatter/Scenes/Boot.unity index 9bf3c30..9a4e0bb 100644 --- a/Assets/Darkmatter/Scenes/Boot.unity +++ b/Assets/Darkmatter/Scenes/Boot.unity @@ -531,6 +531,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 274737044} + - {fileID: 1709100712} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &329578013 @@ -552,6 +553,8 @@ MonoBehaviour: serviceModules: - {fileID: 292698385} - {fileID: 137105225} + - {fileID: 1043308347} + - {fileID: 610419920} --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -690,6 +693,94 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &610419918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 610419919} + - component: {fileID: 610419920} + m_Layer: 0 + m_Name: DrawingTemplateFeatureModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &610419919 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 610419918} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1709100712} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &610419920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 610419918} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aa578cd62ad074dbf91b5228c3ac667e, type: 3} + m_Name: + m_EditorClassIdentifier: Features.DrawingTemplates::Darkmatter.Features.DrawingTemplates.DrawingTemplateFeatureModule +--- !u!1 &1043308345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1043308346} + - component: {fileID: 1043308347} + m_Layer: 0 + m_Name: ProgressionFeatureModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1043308346 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043308345} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1709100712} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1043308347 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043308345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0af7651133b54f398413a7c19dfc9bb, type: 3} + m_Name: + m_EditorClassIdentifier: Features.Progression::Darkmatter.Features.Progression.Installers.ProgressionFeatureModule --- !u!1 &1050564724 GameObject: m_ObjectHideFlags: 0 @@ -766,6 +857,39 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f03c84255756e497f96c3baa7f6abe16, type: 3} m_Name: m_EditorClassIdentifier: Services.Gallery::Darkmatter.Services.Gallery.GalleryServiceModule +--- !u!1 &1709100711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1709100712} + m_Layer: 0 + m_Name: FeatureModules + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1709100712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1709100711} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1043308346} + - {fileID: 610419919} + m_Father: {fileID: 329578012} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1798580247 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Darkmatter/Scenes/GamePlay.unity b/Assets/Darkmatter/Scenes/GamePlay.unity index 438594f..a8a149d 100644 --- a/Assets/Darkmatter/Scenes/GamePlay.unity +++ b/Assets/Darkmatter/Scenes/GamePlay.unity @@ -248,7 +248,6 @@ MonoBehaviour: autoRun: 1 autoInjectGameObjects: [] serviceModules: - - {fileID: 0} - {fileID: 1551649429} --- !u!1 &1551649427 GameObject: @@ -261,7 +260,7 @@ GameObject: - component: {fileID: 1551649428} - component: {fileID: 1551649429} m_Layer: 0 - m_Name: HistoryServiceModule + m_Name: HistoryFeatureModule m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -294,6 +293,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 45c42e41a28d34b01a364a3c2631ba73, type: 3} m_Name: m_EditorClassIdentifier: Features.History::Darkmatter.Features.History.HistoryServiceModule + historyButtonsView: {fileID: 0} --- !u!1 &1965442262 GameObject: m_ObjectHideFlags: 0 @@ -304,7 +304,7 @@ GameObject: m_Component: - component: {fileID: 1965442263} m_Layer: 0 - m_Name: ServiceModules + m_Name: FeatureModules m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/NuGet.config b/Assets/NuGet.config new file mode 100644 index 0000000..d267a78 --- /dev/null +++ b/Assets/NuGet.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/NuGet.config.meta b/Assets/NuGet.config.meta new file mode 100644 index 0000000..9dd2c25 --- /dev/null +++ b/Assets/NuGet.config.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: 93dee7accdd284d37b22dd1818db3a4f +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages.meta b/Assets/Packages.meta new file mode 100644 index 0000000..7c19a3a --- /dev/null +++ b/Assets/Packages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd16c95a34c3e4eef9df47c1c9004ea0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4.meta b/Assets/Packages/Newtonsoft.Json.13.0.4.meta new file mode 100644 index 0000000..b30e1c8 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae8418946238e441cb99e8d5b8d537e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/.signature.p7s b/Assets/Packages/Newtonsoft.Json.13.0.4/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..2c0068215f95544369a7087dd7f899c1533f5c4c GIT binary patch literal 26653 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 D#8wI@ literal 0 HcmV?d00001 diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md b/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md new file mode 100644 index 0000000..dfaadbe --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md.meta new file mode 100644 index 0000000..1604f9d --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3343c69e02744485b9caf0a3d6606916 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec b/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec new file mode 100644 index 0000000..0567aba --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec @@ -0,0 +1,41 @@ + + + + Newtonsoft.Json + 13.0.4 + Json.NET + James Newton-King + MIT + https://licenses.nuget.org/MIT + packageIcon.png + README.md + https://www.newtonsoft.com/json + https://www.newtonsoft.com/content/images/nugeticon.png + Json.NET is a popular high-performance JSON framework for .NET + Copyright © James Newton-King 2008 + json + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec.meta new file mode 100644 index 0000000..2b10f5a --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/Newtonsoft.Json.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2278a8adfbf1a43e7921b31872bc1ad0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/README.md b/Assets/Packages/Newtonsoft.Json.13.0.4/README.md new file mode 100644 index 0000000..9982a45 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/README.md @@ -0,0 +1,71 @@ +# ![Logo](https://raw.githubusercontent.com/JamesNK/Newtonsoft.Json/master/Doc/icons/logo.jpg) Json.NET + +[![NuGet version (Newtonsoft.Json)](https://img.shields.io/nuget/v/Newtonsoft.Json.svg?style=flat-square)](https://www.nuget.org/packages/Newtonsoft.Json/) +[![Build status](https://dev.azure.com/jamesnk/Public/_apis/build/status/JamesNK.Newtonsoft.Json?branchName=master)](https://dev.azure.com/jamesnk/Public/_build/latest?definitionId=8) + +Json.NET is a popular high-performance JSON framework for .NET + +## Serialize JSON + +```csharp +Product product = new Product(); +product.Name = "Apple"; +product.Expiry = new DateTime(2008, 12, 28); +product.Sizes = new string[] { "Small" }; + +string json = JsonConvert.SerializeObject(product); +// { +// "Name": "Apple", +// "Expiry": "2008-12-28T00:00:00", +// "Sizes": [ +// "Small" +// ] +// } +``` + +## Deserialize JSON + +```csharp +string json = @"{ + 'Name': 'Bad Boys', + 'ReleaseDate': '1995-4-7T00:00:00', + 'Genres': [ + 'Action', + 'Comedy' + ] +}"; + +Movie m = JsonConvert.DeserializeObject(json); + +string name = m.Name; +// Bad Boys +``` + +## LINQ to JSON + +```csharp +JArray array = new JArray(); +array.Add("Manual text"); +array.Add(new DateTime(2000, 5, 23)); + +JObject o = new JObject(); +o["MyArray"] = array; + +string json = o.ToString(); +// { +// "MyArray": [ +// "Manual text", +// "2000-05-23T00:00:00" +// ] +// } +``` + +## Links + +- [Homepage](https://www.newtonsoft.com/json) +- [Documentation](https://www.newtonsoft.com/json/help) +- [NuGet Package](https://www.nuget.org/packages/Newtonsoft.Json) +- [Release Notes](https://github.com/JamesNK/Newtonsoft.Json/releases) +- [Contributing Guidelines](https://github.com/JamesNK/Newtonsoft.Json/blob/master/CONTRIBUTING.md) +- [License](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md) +- [Stack Overflow](https://stackoverflow.com/questions/tagged/json.net) diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/README.md.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/README.md.meta new file mode 100644 index 0000000..6b5e721 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c452a0a99e1e4466aa8f4891125d0c05 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/lib.meta new file mode 100644 index 0000000..54325f1 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2182179c798549b1a65e75d63c3457a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0.meta new file mode 100644 index 0000000..6e94b07 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efe149e5e09f44b52973204e61962622 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..da695d1d5759a452c8fb1bd2efefe24bf22ea20b GIT binary patch literal 717736 zcmb@v37i~NwLe}{Rb9QzlIfZ0?#WD&PC_!d>1DDEfl0y=0zm;qHX#$1un3v}Dd-_C znXV8}5HWxdKtNdpBLa%JZ_j;sii)`J$aBGkr-Cc$bNGF~=T!An&rAmN|DVrPpL@?e z_uO;Oz4zR`>cyMhWI2{)xp+JM+&j1a}la)?s}h{j~)jX?fAt7M%2o zEu-@mz*omKaeLG|An(*$^HP1HJSyrYL!86ov z7p{5IvRW4Bowo)pD6P_(5bsR(vP@&4sGBaBjR~BHlnc=UC(!v29YPglBDfF+hp<`F z39{ahOyC51c8HE(AN>n$ClJR3U4KXy!8s9~I8JV4d@k^|8_WyI>19qMe=&+C4g}1P z5aIx0L4*(o5DO!OI0ns|P!hXV5_z>#OdR{Sm z&In=@TLtvv*RC@`a|2kmd8y6q_81dQ-`1TdSF(w*TU^WahGxU{X1E+TVJZ-_k_r(e zz*`Z}oq%AE_Jp$D4p~uMvQD+N2AMA!-2?7B9REguj2C6V(+src+sa+ZBr=imZvw$t z8(UL_jcq9ql0vrvKxhC6-Ks(+Rau*FYcCI^MbhL@KCOcG`8R`CC8^$0TBK}G zSHEXFNdqxGJfc^&FVx|z8#2o{a8U)`ZKKb$TV9x!m%JNgGX#7aqzmXsX^bJyHf1nO zO2Vb?<&JeRc*105l~G3NdN&m|wkE@pZOgZphdt5q(ooCE&D~z4O*flJWxd-1suqrH z;_j@f_*?11#`d&#?Ut3FwNp|(wEU9h&B$()r$MBjVEUr*#Gsuo36yud0Bo3AZL955BfQB!C^glJGvxH+Eq$dn-Bkx@i(0P%tdAr2s*XJsu8 zAdZR<;sE042q6w2kf>Wa1j*82_ZYBZqGL#0@pQ!S#}LnUFOHRV{Y5~STd0@=Y-jXV zI0B+d2zv3(M|;mCJ*UUq35WSKf*V->E}+^T z%Oopa(uXn2{5VyzS~}V0I;|xKS{bml7TS4pN-V9lz$KAZm`276(?GF?X?y``G_aCJ z>th+O;(3}zGD;(5Em@{%9Acv_pTsQgJdwXEZSyutTVuK_?Hc;3i~PHRDXp1hg{j=r z?0tK)cW<-z9nIc*o4xOB_TESDdG-aftXew~R>j>9q#&3&DiE$gtk+1dxttZ+={moh3A%PS#U4Sa?HCC?1a!f2v6y3yD9Pa0H=vxY40Os zBIz)>rD5_5oZ_JQ3u;4dDDM=zII+j7*Null_b1YKT><2)enbo4655m)$^pdIu ziSIN13A3#6{1WtBQlA_%O61vSvmZi)NTE#aVg?*w`yU2ABoi(YVZe6s<`Poe;1m}Q z=A7b^!Oj}G--~Lm!p|ti#+e`Q(J1!|+R_dZ28qb53^0(i|9U+?%Erpnidw^FHy9kA7e=m*gZXFj6|pyJ*G~V zl=*yUD}z#XDz0;F)#)j>jXvFCd5azY;{X}E$J1yWPeE>>bt|qLr*$J*$1^BarqSbQ zG)V(ymZSJAx(MM3vYjL=fy~tyLRSds5=!T}{w~nl5jpI?YaIcaHt?Fyk=^LWSv_g( zNB;{y8Eo(m(jGP+Gy5og$sq80R;Pe2C8ydDhp(qC%ElZoPKALb(;)cd}4iA+nX{h(!@ z+d*sBj%GqJVP(}Vt$XYe&75p2is?kqU7bPmeOFI7Dz)kA(G|yG5bvVj1@^>}! z%>LD}(Cb-bUZgz>X^&onL1YHT=^E5HdvV^o+q{Nkq=5ySpjqttFPWZ{ zg>@a{h#h;U+p(2sa+?cW3K&)E|?;> z_AFhr`n9wT7YvYFn@iUzbS_IORZ|IJSWb7fjOWNY>E*{;I$ZxVNMJV+r6VUqas1CRUE~eMMF!BDm}3m2PbIus z=e=k-p95K?wRWKs&Db!M7E+AC%{vhnlVXViR-X@99!HiKb2nxLUtjDBx=htH{*hNNIG^rZu!W!}*h&^C_wMDk#dd(<2j+;R&v=Ew6h$7>yWWkZ+8bCrUx!3Hz$ay4qGEM5_+WxLm`sw-7DObQjJNaU&>mt_<7$4;k#0b6uYK z5uHh_Fm%~n4(p-^Uc>;DuG6&-`~XQ0z+yIZ>xT9q+7(6xKwo_p!J6A>Ik^AQr+ zl~uOC402bhZtW8hiR~{3YWLHS#`ci~b($w8;x(sKI=k3)%~POW{OE41DwxNS%r4dp z8iH35a^@@!AYL6I!~q2QETs?!5IZ7-IM8G+0Af;WB8si)LI(X05|lRhGdKdG7_^N+ zsKXlc76uW;AfG`PA#2bt7(^6p}bJvdpiTi%+6JyRcmNDS=La)dKi)!6yXPHQ2b| z*JX*%{Dw(3c;#ZeJ{t1+Sjg++A+L`pFAX*cbb=2G%mwcgSl3{a0SDxRKJz=~1BqZn9_nfd6KP{2K({y0 zONmBf74)nIdNI+RM6a~{1@vS?8ram3V?WU_R}vL!57BdphUSo)C@%%g%kP<&2SsK( zc#l9Qct~I_c(=g11{>s_d7;msafW3w2m0v+FI&c=Sc7rB{-G55l>cMZ*txX@^(IPl zb}UUSB1t{CU!W5_ATSraQ(#?#4Wwk6^l6%? zoQQ2sex>WoUePL}dhMRTMZ!RH#RN_7WEu$r&6N{0g~>D$2AbDLiHie>*AgN6AA-*M zpbICHZ$-O6Bg!PlZ48Uxc^aP0mCo89U_4d8j{t*#Ss?Mjr%pbA0pZaK7gwEuo)VYk zY4oXYrh%G|KKm-rEv~u)`EtU14+I%4Ds!&bc)Pv};nJ~JZIA1$D&wh$-_Q85@NhL> zi=cn7R~^OlV28TUZz2=rmVC99qrK(ekSt?SnkkI_QIZyEJPvZa(t3OBGLg+2ke);e zlbF)|Ds`pbQHS)Z%dpntlN z%E}40p9S;6My&vuu)N3ZMp-Yn$6g2Ws)5vW*tMb?_N^Lc_x@0%_OeHT)ee#U9gux) zqkJnbjwvd?;!qVVgKdBbVMU3B5z(IHYr4R{AS>nWD7uvWc&>ukU_4JH&67%pqLv!0 z6}Tm=z)9$ynen7%u~VTY)g$AoUqk+RqWg8o6YNISn>(^01uRUQJcuqMM$}?~=*DEh zY4|2Mx)S3#swJC%Ftfm+HMt#4r=`-7+)LP&k|Hl9w=W{LGr5DiqL^$eu1`F>9LEgJ(>)g53`pnIdg5(4d$pW&p_5n z&Yr8oCnfYWn|3jcWk(8V*A^t2M`luIU=ws-ZhlPX#q@G0KI^dsmwU0(Hkj~=9YY;G zp-v@#CC{8k>0T7+xw1aF{a{gMr8C{5()oWEwa!UyH_V%xb*m{IgO-yREq|DykTDf1 z5t`Z_NjXJRv|p|@++uOv3vE;D2V|Y&ZE&D57&&VR9u%EL(JvTA`-7`>?Y#m!*4`;F zyY^PV;qT$cHdU&|XRqFdEimzL{iN7FxWKM`J(5K&TRg2E zG2oOF9;X0qVVZb$gb&^2S9dw%IaI~|bf`wQXSJiw= zCWaTL5!2q6qtwDVtXfL2L0Z2+TCg$=`!jw2bTg>fKM_Xm;p^dHRa^s3@v4a8kg7#%=Hg#8ohDLIDqRM|EudqAt{IZ^y6x}C0X zdJ{4MTfPrnGi%Uw(Qj1P40SFQc0w3Wg>n2=1m^XS1d8WYn8?D=^tADg>{F4z@#0}U zxC^o^ZIlhRpwW*dE4_e&BjqhPe1TPQm?j*<=p1Y-Z|t(ib88`RDy+`!>FuyEEtNTG z+4ITR#ZE}o1{rsw#|agwwOY1}M%xk8Tz|3uK=a$3ehzzGENkX@#j|T$BKhMQR-45>wA|1! zw%}!~fI&if@YM2!94oZZ{3kup@o6*}2O%>}CWG3n%z??E17@K!ISNye*-hkQj zoJ>dBR9~ml=K4mrYbwah4h)5B3o@uSG&V9~FbdWOc$Vdnr8y8SBWlO6VltFMu!qFrlq;vf~B;fKwRR zkOj5{4+qLcJV)c%iszgeo@EFd#&cMVri4l0rDR<&1xQn}`_l>0+q88B zReG&Sf}}!0FjAx(!r!${g_e{*rOtR8Tp;@Ku-nhz!9tQ%o^SU_CQA045Ee6`Lz&sN zL~AHbD2J>7iySA|s*0*xY{No;#(TmkwvWizoe42fj|q8&Qg3NCD&xZuJI!2d*0jbh z_^TnSZF*=O&d_y+xw6jSY=(CIHO$^7d#k2~1r z(iWVw&7q*cSY2!Y3}bx!&!L`7A#ff~<6`#sznBjE8k;3-+nCRX^g@;nXBrdK{e!=d zO}#gw7H|n`cL=Xh$WuzXLG>UVvLW}LhU+1^F1MYIgdq}^gVF3nKyG%28wfW<>XCs_ z=>&WG9H`p%VK+S#`7z9yv@^`CtwFZ4#^#<)TLxp|p>4`$MMgI&TFY)8i*&BzB@?4B zB!g%T9MWGKN{l+JSgp5Omv%5 z?UY5$+9uTZQCJ~a*?b$)QQj@qN~Ez|WP-JGw;zexk6MP6NqbBX??92ZCM(J07>=Ca zfZJVUgzA>raessP3)&}`Z%5~9FRmsBoYBKlSkNOARy~0e^2DPwXl^GhSD3|tNOwdC zaR7m#ezc(6H+dmg!a#Gw1kIGiVhMYmG_WO6T2mIUB@BEp5{hW1EM7|(Xs~=1(M*v? z!a(!p8E7O7G`CF9Op!;zK!Z6^l-3k^Bn&jSPS8w|N5VjJ+XT%NJ`%Ro9(xODxJG+F znsGpnqFC5(WpwQ2FRo&#c^)ilAQ*()#Sj*;IIv84HxLGvT6glWtd|Lh;tJ+H41!J7 zAgm>20-~@{SbsaM#2<{6Bc7B!! z=A0NR33@{-q#eiX?myU{V00NFsucL7e?L?o&agsv#stEeG8{xz2JSyj=Ovo->- z!U3>O0kGNtu*L(hf&j3s0kA6AJ3oqFDNlRn2yBEjXIt_sd9`CTpl|f%hCQ`q_|pp8 zW8MrT_WP330pDW)hR+)C0S0WBfbTM3RTS_c23#xw-)6u8QNTwSFe(8*VgLrb z%Ib>@c$EbFkO9L{!1o!jQvx1g0P7J|GDcs(DuxXr1dE#J@Hdj!|5Ajb!>rYjE7VIG6OJF)eO=nmctqQCY%_uIAh-+PMWwPrJXzVhZzyWPK`*P z7!RlZ6$W68rvdbd!Ex$eWx%>9fIhJ)&e+%B6#dd64agaLlsG2;b>gJqD^gqk8f=E~ zETn60hel)^=ifmW+6m7AT?x2??VDQwj>tT(M0V5$Mt>jU`ItF_GLZ)D0Kck{%*v?xz=PV zoyENsvzJ22SnF=OCgc_`CJGbhOAS$aj1&=E{~kt={G_eRrsn7WhfLW19;D&d{*A1N zJdTxsy;&(^DBAYQQhSWh;nINTABHln=0o4{SQcTJ--DpCKn7775;5U6fFQQTBJ29g0Dt6GkVYpCHd9HtHCn{h(In4UUf`TJU8z*w$s6 z!XlO+SYl;R*o#V~2IrJ;W-r=~GgRzbA+aNM zo}3{vDMlBOGnNe~GKq!KPb+80%piO00fbbJb$l!idf4cbJ`%^i^k@z$=PxmD27BG> zh5u>sZ?5)tz~V5{W&2AK64A#xBIWjUZ_gfMpIpIlwG8mub(!@vEq{1@+oY$iE zvbb>@L~Kqw?}ao9Y*uJ+fQ@N;Rzi&iu!#vxh5AW39iHSZ%n|%ak+>miMP;ol(xI5h zia~r%(MgeZD2etd60;fdJUMO}K}=adO85`ZiNl>5k}&s1K|LD8bG8NK5!%T*qc22j z&p5JF#Y;ga!Ygw>*Lo6dW0lyRe?|tU%NoxeEEVZ)Rs=EKhdTbJaEjd?BdR;qm69EG6OAZw8e};&R|9$KSbudx-FqQKMLW@cfMMB&s{zm6pLIc&4RSAkP*h zG4qtC#N~+7|12VM9b20c+oKj9cz#ZJ64jmQ%0z866SmQLUFgL~!reZ~DRHH^KTn=m zw_PuCa&W0#26%o+coNm!+SMw)18Q{ z+1DfnN>5tY632fShDo}UQ9=(IcIH{dX!oO2|6TM8* zKeN%xU?E;AQad-KV%0(i0Km3L>4yaywM5v$SkY*4fYy-`2$ie7G_X1c5cM=#9-2P0 zl1)@nPB!6F5hcuxIK$@L=seDS=us4=Co*kv%!6!B9Lp|68#;h}M`aO4s0G}^Kk&Jg##TOvf?-Q4Es7r$3{Elu zQ4EsdleTg5JfgJ!bUDN2y^~SKoo;yjQzqW)=`W_6jCssr{<7?`2roFm0|bM5$!RgC5k~Z z#C=f|^kN1PML~Z`NI}H`#N!b{97o%RV^lroB_mY~KDZWBMtL2G@)~tIxTNa@pTk)> z+Z!X0Yen9;=OSqISfpmYP8q=*%F@)t0R)t$2yuWX?J0Q=vo078Z>u&AEr@G7+B>_T zq&H;|=2+W7&6A~;a!Zf-PM98wRN0FI>7i&9A&xM;d4Q{#-WZ4cJSxReKQ6_6l+^IP zBvRdRR2_*p=j9l_Mgsm$pHzFG0XLffRh#t zh+>co`kNOGh~mNk2l|s24TxhHn#Yty1LDXMEoSn{08tD=`$60omVOE}_UQ3oZ$8e# zr%l<_f`Y|g80w5srhq?~LQwR8KX5aL0e|48CIbGzO^pToft!jA_yf00KcpiS>%r^utiV3I-;Mx47{lNV&-Cq$J znOB-GD?J;tv}mNoHZKhyZrTbl7;w|1h+To3mPgDFcz%pL`>`}2dP5*hnAkD6Y3an= z!A*lGRuOL6O);Ku|A21(z|BIEl7d_2a#GZ1+hZ88qA9>y{T|jF_S*az$(B$yT&K7n zaE-M07i0LPdo8WW4ecyCJnKW40pvqmgzuW<2OF!r4*dT?{(vnUi`sd|{1u3dXV!85 z730PeQBx{6>N#N>`yPJ@>Hj9MmhA}lMQrmgNW2?8Y5Y_j<+kO1)mq363xRB9fMZaFRebI8k6O zI8I<)$;@2kNnea725;8EF`j!Qjvd@6&Lqr*=kPs_Zpm5luXK3quOBDvtLd^E#&T{uG1mbS1{(y)U| z1v6wO}#M2YqO+p2WJU%g0ls>!8rmG!I=Vc!5ISUN^XqurZ2{uc|R(q z$99Qh2OR>PV3t5P=oFX>+62~>%q&%&^i9&|(J`Lg62}gD1Uf-Zpc~``=7KJPbtU6l zW@uyRi}BnDIgg3yAR%$=z!T^MNr7&V7MKV!05!Y|Fbi zikX6(({oIc^%&TbP{E6td>p&pmV5d*Asv!IHrjsH$rr_B+)t9UgGB}O+ zICii>pc5P+&<&0hmdn6EaHy1@eiaZgNOUCGR_@}y6B#)rC3heO>yT9>FEj%Zq^vz_DChTKK_ zqChA3Z-Kes^8)J{%-1AQZu$&%diVyNvBq%vk6{{f;%RKsG|+itt|h$e;A;Y%;1Pkj z;41>_8f-9ZW*YSAeZhu}J5_o8io9->yxYNT0-fM30&~GF0_z%VFd`-|`n2rg^8PuL zw-}fAG)?17>f}2jmmPdppc8ygU@rK!z`6z-jF6cIedg@RI{8bO#)5bnr)wJLFpVDy zFFW{=KqvUIz+CVHfprZw7%?*q`pmhL)A(zc#(wcM&d@Z@V;VmdUUu-fKqvSgfw|x@ zfprZw7(Fu$`phdPr}4Kijm7aaHftIfgJptW2roPMr9dZmLSQcVxxl&x8(0~pL7%|@ zw7LE~6Q;2wp2nG)#sy5{H^R#fek;%ko)nl1el4)B!DgMNL7&++IgP)EX)KMWah9fm z-P}y@d*NjVe-P*dPYKKgzY|#3V1v;%^Fg1%mTso>51XfkJibAX`+52XJ*;H?1|0wv zNni$DoC^FXYVM=3bGE*j;&ZIXY(89$`V%1+zr+CqniCco$Pr6*6C4G7gI#|L!R8yh zm6XT0pV;|4Ryg`ipaKS#KIv47_SkRX)Is!~VrHlVwDCED`pgQdV-vzCDCQ3$uM_-^ zY;Kqo#jFA`X0yi%z?L}UqKzgjY`OE;UlylMc{J3;fz~w4B$h*E>m>pAr7{0KaPwjK z@Evg2b(ksFJcb-pQ*xuIwY({YEG`;aq~7uTMIiU@f&$UW+{Sq{9shv8wY(&Z@?-D` zoj;jylDny)%wo5FN>jMTZfc=Oc2W;|Ew=I+cg~PoXfMxl=MK5O?bv@Ey8^-O>B7)T zdyE+fPqG{CUWI3^UGpKzcreadXWiWkuwtZVzrj>v#Ap)+celAE586cRV0H=Ttf$Bs z9w84!Jlb}8H@S)4O&xCUCNs*4$#QuubUVm$k;-uG7Q97JD#6GF-Ua*Jb}Rordg!JV zDR2I>&pvzT%1t`g3TaxC`4zL{)kxj>q}iVpz#d~I32CLm;0%gPKa&AxY*9?Q^S5)O zId6ug#&GPKu!<=Bb3`^$xR~d$!d|tfqU!Hk$!$T}p@@)D3mU z%CM)nY$y$Lb}k4JwRUJ@DK1X58|D@lfN5BcLYv<)apw2A*6t1f?+xI+7o9>s7NzHy zb@XA_LSLWw^ad)+AL3f)HS~nHvB-M>!qv%6WEu;Ha&>?(az}V-jPA()JJ1Y2g&&9@ zy5ZJFJXdY0;*wQ|rHbvV7N;uPQ^oWM=4+OP?#{xf!g^i!VDxJZUy7epasJwu30ydM z8sZL~GK^sa(5J4Nn<`e;qGG|bY%SJqiCp^t;4r#2cursY13_+E`#ynVgZ^*@A+~uD z)UoF@Otm#5{#w$+r7%#=(}bdX$?{TDhCe`ha|Ce1_f3r|r8Z}92T!s%e`G@+WdY{hcreuvNO$y1hdUVITS0p}o)vHtKA#6tuFZme_%8e;i>I&3 zC5y+dWiJKK+5v`KDW3Dz-VBz>;vR)K*Y(`UW`;q|u5haWbqzeb0{$at0bp~S662un?Jw27 zivCF7-cqw`k42r6GpR!=K{oaud~x=c>DzQKNNz!%A{e2 zv=5e~am}!)vY;1Pz5Z6jOs)PDf1_sYAnr405P3j8{|h&I5N**nz_S<6OAv!F{!E9f zf`&5-J~(9Fa7Va(L21dU;(4ob?1R{X;aQ7WnzrOraogZADKy`EiNPo{YQBB(4k?y# zydpuG@swe@Sv1j2#OU*}mf4-mhA-;Kg_rVq)o5$GERr$WgauN<_yk)o`8vmwCQXjyeS@bXiFzr@VtMc1$RXqS}e~|ZxpuVuTQk( z&rfN#!|$Df3Olx27!a|NmK;msxjMMNHrtD^`yDLW#WwBLixshP5!r}LXm;2<%dLA% zt_6d~PGn#GV;aHi4+$f8c_j5hNY;foZSIt8IICuhFgByn11$X+| zyTAbb;9z<9pKyi4IZofE@BEHz>OJsY>9AMP-sRu#6wxuoy2xmBcGpB@zUkkn%<<7# z)Q5zX_*mg6-O=GwI1VqLf(pB%0s|se&%Zm8{^%m;lYdTOFyr(O?&r)KJg9sMUQxvL zgxK1Zo`gUKD!IV9da6gKWDZpXc9bAgn!cH_O_{&f@KNHpxw>8ma==yh`FBOy1WnN(wX zcYM?I4&82i2qV)vwQYQN%fB_PD}6S;TrkvyYIOjluNK0IH0Fs-!;yUHZcV#dL_lMq zPSz4+aX>@!SRH}<%*)?k3(lu)k>MPsc^uW@9byEylK2!r-aN|n3(1qW81w8sJok*@ zb1zOm55kpMyAxc9T8j%nR{7g-E?j$s;+CwftK+o6gUi@r$JEUA3L``B!A}NONb+;H z?WvY)C(Vj3=1v+|?1)J6TDa9Y_6)>ej@Os{mTB$jMtXc@Xz{dFgZN#ts({~xYu^M7 z(7X2aa15UcD+1rL!8(3V8@zD%Xhod23a=3=o;|o6zvm4eF+8N`ZGxzcY`{oI-hodO z$VG(1$qds%YhHI^cz?iR8jdm@c!B9K>bX^HgJU)w?QnF`aT**P-1Ac&!{cBPW!9X4 z;$|0X{){rHw9Wt5vnaR3@I9ab@=rjnely&8oR;kkYkgfau4TBVc-qkUafCL5joCzZ zDy%zE8)#0eIw#~GC7LR9C(B6{02lD_reyT@kNc0dm`lSwG9XCgi)$mO$sto4Y?1W)f6T}^(g2_25CJg zjO=mN9T1WxQ|2WQn`>R3bpaH}KQ}Q{fKFIz@Hv~2(Vs%Q0c~9Q1)5(cu>#j0*e0}b zDQ&_@jF|7RiG(ZVKZH9Uy1x$h1S7obTMbU>;e?iOb z+S;3l{D*j!t;%^=EPJvGoo6{DCblrmJFBEnZV;0eb}pQ2l* z@LVqQq`)fO%@PjZDpVFmB77?WR$t^rBOHf=d2JvY7N9q|W0LmpQz&Y>a*`q%Y826{ zKt^+Ob@-eKC~L?lqCvdoXW8HjsrYjFk|wRUMjiiMlk-`=HqvZ!ZlI;cQgWz;vsfsq zg_Eb0&+y?u?L#p}B5n-rWx`s6Dz$BzI=PVVGh8ynp$CT#VP(K)vUD3SDcgAE!*CD~ z!vrW9>-8F9Ho?!q(R(5#$Ia88$qL8nE93LkJb*gVH2dCx^FM-`-ta)J z(O53l-im7mAzZR6tN}9%*OYm?PZzH2q-^Zj=B1FhP&(N$m`r7=_-4=MLC+~Jk~g4p zJa!f;#1y-#Ecd{;VnoXUlp^p>uh6u9->$ut(&?6f$`|&@UaTJz`+F*NcW(*lFugMX z`G@I?7D{vBnlCD13O9ty;s;<|ifE65R#99-gOBN#BEqkPp{& zaLr5H#{v#>70AOfE5}_P7FTh60&lMr&v~o*JnS0a`U65vUweiku~G05ab2=%mWPSv zD?F@Xo;dt=!EIk_3mg+Td>uSZMb#16&1Yd{CO6{Y-_rDWx}pP3n)9WW*k+r;ea&Yu zS>KLDTA9(54@efzrRPk1LETJm#!#Dd~sl+A#m(? z6gu?0;i~We_M>%GiS*IFmAO!5ZceKZ8S`ee?rb1>GdkRw06ttLnM%><9YW*wP7dtU zxZO@?6T{)Ff!c?0^Cf5pTO+#FDoxlR_Td^C^Hg`+nmL9(JOwwRu_BT=1d+7b0{spHjMLP*9pY z-tAC(G%`Qw$sGn>rh|7+t?6mV99qa^+&DhJp1`mtXr$Dnu*s=5=UYv`JzM(&Sj(*q zaX8K^Ltz)Qe6&Z57er%HZcaq0@jAUZ8;%m*o0+gyVw_rIJUs`4G+BhWyvfo?#B9H7 z#!$!kE;P<)bwFw1bdNd!gUyBbD;eIY9!r!-b5RZqqN~so!B}PPDNDKXWiOIpuv890bd)Y=bfgG z91fK6u7P>#d~Ad-^86$f&7n8m8_kV#%xlkq{&r;D`CM$5Abj`3p$S0YHpn$Av2-PN zk47%0TeEIv_+HHaQE^Z$zYRs0s?2rGPUNS!d=y*s8G~DB8S_%n2|MR><%}t8x?8iY%{pn-l7miK z!}2tjHTXRCnr<}XZ${E*TeUdbp08Hg!&jkZvh6Auhnx*|Q>2R*_q^8O|3ZCCRSNC} z`yn^@d*QkfbFyUb!|+X;y^d^0bM`tK+3Se1cR8~sd>*TH&$4Uy?n78xJ2ZQ<;@OK; zs95Fgl*(JlWIL4;^VQ(1J1+FYvA?QSbB-#TJWVvbOxj{uvloH-?OcQ%`C&QrFL zr)-obVe;6V?ygvC%4Rh?U78&vfkTm0V46GGUL_JdI6vB7`ixn_0gI!?mA4Q4kXD13nXNA(tAY)D{mdcpP z=EBOg^Z8b;DT2j{HXju&P8G3eShUa2Ld|O}qqTgMxz~QL)fWlY#x(x3!;b97>kCz zDf~IQ;c&PT=ZJmd%&N{*r3kq85vXMN3H;zR(%O3jmIjX={x)1qqoF0y-0K7KV#`<# z930bR?`zIuFWsE!GQRdIfzjl6O^uW5a7|lJAH_v0E?ajz2_l|_5#id*q~uj*H7LSV zbzC*v!&&{*P#q}$jkAs>apd&TRtLv?!_y#KkJQyc9>2ilZrq%`5gIRy=$fEoULivf z8RNbTIzoSqZ+mlTh4a+-)(Hx-5-%uxX&UDQu^g4bcXd??PuD5K&rj=T&Q^XU3{(6Rj$K@$Ly+HX^SVZ$804@coISY=-u~N5csS~ZD;p7ER zU&yhYt)bh&`1%|!=)JIf2A1?zwQ;Qv@s{C34lm|vAEw8_(BVivs?-!KR*)DvVRlg( z#8;G;N&0%f7GwWR=t>WD6d;#Qw=2j=zI2D)*OI|HUdB|+?8HGUdBqs2RqaEKHgmP! z)l#}NzG@+pEs#7FCpno_lH-27HaDDBfn-r{)bfzpNevQ74J*jgq=r`x*gH2yl;)y| z@;?pQ;-6c2G2cqiH@L)^H-uMSTnSWl(4M#R+K6G;g+BGHyl$VTjg=!SnYbX?*$v6C zxY2M+>ZdePuQ7GbubwmQYbK|C=|tMXPtv9fY5%a19!5d4BMnK~BaO82+Ro>h_U=h( zKNHKh@RPLZLfXeR(nH_XaPwTy@v2_T*{}i^Zph)aU{g*S_vlui!A26#cFXBpzR3cw z(!(}>CccAVzRR73Oo5+z#B#BRmTO*(eBtFK@;0A-ehglZ>f?1?V!8DE@CdKtJPV2C zcKZc><0*dwR2XY2>Xv2p!LA8P6XG1MlAjb0oV_ zJ!Tam?}%se{7~p!lq9;>gn51Aj@Kh{AIJ`{=Og#Uux$#M3%(|>uEAzKWW;?A`eJvy zkh--!#_M5;V+UUed3;%UDB2vZJm_oOHEI+_EtGSVFrI;JVZiHDm9qYa^I&>j-+UaQ z_Lz(E+60@_3SX;NY+H`mH_Ol-!?gi7pY%35<`7XUKD=wN$1D3%wj7^&Wla9Xp5E~q z5a1RQkX2KaOdU?Ny5Fc&NmSXXj$gyxIBhHhMWN6xFj+jbJ>eUPj1Is+9A7qSml ziQsyDBX26xt79_lFKOAq0Ro+1l|VN*P+%e$7MKf$1lE<@Y*3l#o2u)JLY2OO$wn1< z{&W@jVx@G=8%c_`M6F`fB%;Sl>D3|2Ym{ZNRW9N>=1R#K*K7|%nMpreOm7|M?ud(L zGxjsI9WCGLZ2U$dto%q}1yvT6Vv42cCA18|hx`TrMZa^K^_#({E@7@^x_DItoS2ep z8?-HS0M=__x~+)LaDP>x6I2D_{;I%4fNfTkJMJp45JxU33#@BAbEGPnK2?JPQAXZ} zWsgw-33D3FUX!7DO;kQOJuG$F6??1o4vQyLq9?D>sAi}QbF=6LFSPQQiopTJhydd) zEr~UukwLqnL`C>FGhxU``|%RMv6v2j5VrXr33LMNBTJjX%tP7?ZWaONg6|8gE4g`r zs*XNYT`jbqT6{agd?gIdS*qP)y7gGPj|)FL_#c5z@H2sK@C$*7;O7E!0rta@eqG7U z3pHK(rnZZ^rfP5|n`ych^DMgT?R88rq0EM^P7NCkUrO>8#!?+2cYNJ@!^ZwzWUzy$ z1UkVV1iHb~0&#avU|q?~Q7R*SQ)Rq7l=1c{G8V9aJDrSUF&Xb@mT_lH#(#(mcJO}! z@g4+$ZtyRGx!~^t>q=&hRvGD28Jnu*WnuA|yPDIxG?pHYhM-*V{uO~v@Hc^Y|BAp| zfKwtYHzhO2XnOQb)yYGlPVQEnII_hqc{`#gzKZvfCAt z6Q3avIcmsoqVzN+O8k>dtP~Dp%+V_!`s=KP8 zx;Mb(8etOUut`1FM{%)H7;pcV$MWTg+;)%@=mcqjcm;;QT#yi0S2A;~=8L{*@^wR$ z-iIPtuWrctMv+wnnO0VODw`u-*L8-_?nu&!kMP&~_;zG=$(tx63Nv17?+coai z>CDd^5#O(nFU=3Ofgrb+LeQF=dNdTcwlQ`^#Y-vO6vM3AU1 zHkIOi8aL{Nn+oFoi0|X%%eHf8qZIFgD~c2`Zi@Us6!`{5ZVGx=6!h~*-nTX6y<6m! zI1$?itKL*JEXu|fLB|v&MBF}!YJ!F zeVUK+!gAoN9k)wrnATiEM?B<}5;A+5kXK0vrWq2aDd)Q+2!-(!g^$h#NEw>1BMghT zSjUAUS_Was`?|cqGJLv`XO`jBu{{4u@?;0U5$FWJ7Kpb72uuV|3d{vh2&^l)f&F0K z>C?QUemHV&?2X{<6!%-^7Wc!vTxQl8uga^TY0L~9xplC(E#QnhRr0Rg;;fYK3QYvI zx|NidbopI?j7GxoU`&v4T8@#D`25ruj#ar>!B=B8x*j$@AW8#D^EBEt?=E2~4CaDX z=?o{othM%Ctn`h342^}KcNaXuxkgaB)+sI=>~wIEytP*9i%~JuHfa_KXmLcqEuD=i zKOOiAyA#l1_XJ!UBLSBJN_?@3IH;$_ofPv3nD7lNUnYN?wG}Big|dqa14*YK(d^=U zW!oz%s(ECRJe*BjE;-UC#n56!%OPAFEzVajHjpOjknHsg zK~|0t!vW!b(SUHSF)U%+foKdai)qurhJfPiM;PiacE^M&e7&It1Kk#)xlIO-#5&eC z1C1u2C5w#`@FWMP+7Z1YF-oH#wW{>6Z3Y{)3$=%hyLlN>TVtI@&WvzH@DN;e6R~hP zpYpD6__vv5M8pWhKS7W;sJ0&Dniq12PrCAk6QOx3;Lp&D%De}kTKps9L{Wg}>?a-|JOe8+QP#O01E1(VmSNGzWIy6*IiP5{7!j59WV*@z zlcP-QBsdfw?abv`m8`4dZAe=&#Prglh4cntsr92X15_0`cNpBA^__D!x?o3{W zM=3rin*I#=e+E@_npnE7;#!!2%AbRm@`RP4nALKaV%W@|Fr;wu&b3?oBiJ0o@4ukY zGMZ&~c^CQG(RV5A0Jp`s@s;~_XfcFB7z7IdW zN;I=R9ll@Ix|Zb?*2-BewKPuLswMgWy3R&bp*4tA3vVBl0Q}e=ZJ5HhM|r*tvKE(T=NuW;fwRd z%MkX_#ETUadTC(l`mFr_i$e%v-Pw#2M3k5ZsHAB<}FzmS=@>&q&I%!_Ecw! zQ~jaH>&W#t&F{)Q|8NM^ZHKBg!7#q+QCKb>JgQ~g0H4i}% zi}Uu_0{HJ9{TO1SjWy!2);2u;$C;M5a}h`*qSwmzP2_$v>O8+=ZMEVY-(Twg-qw7;5^FIDJ&2B_{tc^N*q^I1AEyp*g+T+e(CIDRH3Q)y4)T=y5? z5-uQL4MSZ0(qnD-UQZIjACn+$Pz|BI2h<vkV0Ww*1C;e!>!5*_HhAH_)B5~5Eg5xR-tzE^Y;kkEgCU%C zBkM0_9m_DBqxmg6wR@wKJo!xYZY)^0c>W3yh*Q7Fj+%~Imc-Ww*%XyhiAFtS%p5LO zP5aY6q=Peu4Z8soi|-O$%>2I+KP6|!4dLrmCq9;lR?1dykA4Xm3)mPr*Pl;#wH}kI zwAOwAN%h0XAZHks1=#dR%Gjly;jt|}mWA0Au{z`CaW0wbxz^E;4}CArP`02mIGUCf z^O-Lr;mRtnd6fiQBvf^O;QRey@3Xi1}GoRgV886(B4gz;~a8>6_qzZ&s?k9eNcQj)B1>^0i1y&IwNj0A$ zygH@RiL;bfQ=Qtx^6${&RF+tgVL{ErD`{tw=JY0BnAH7eyi$0ThS}7_>#YBjSK7{| z%}5ik+<(d|W8?PF#wK20MjdR@*K-$StBt!lC&#&<3vMdKLlHQD!`sr2hDvXY8sY`m zW@p>XDgQ332Kz>tmPVnI%#Kpa%V_^jZdvfEsE@j@Wx>Od`!6jE@^;vF9cC{$J91xR zFL*F=|G-}GkH}qg<{j*W^jn>ISE-x#^pdE!w?c8@VD1qlo*DiDiUpSZ>+rNDefFZg zL)}R~fTIEgJN5jyU2e(a_IkRmr?9ZAl3>@9liq38qD3ngA^8QbuRK@r_3cBVX5XU(5tt~fL``3d-d$LEk zq$(FB{heT!Hjih}Vm3jH%8TsUSy7jy87YitkIfr+Ng2BCJia+UZVYz(8T}SY zquWboJ^A#hk1vgTcJ00>Gx*@+T@XX>G9^U3$U5EDT&Yp8-v+BS{kUcESO-3O%J+!( ztJx}9hwZQZ?j=y_R%GchK&d!zqpFDee}Q`jPY3+`Lc9JvKO0WXBEeXV^^R|_`zcg?=qG3_?B;kK&O`( zx5JRl_!w#J6eJ)8r6WKkm6wjmU{D7=j=yX&#|R-D-8jcjOy)?^$sDom!x5QNTxVW} z)*)_l6kOO_63@KJc+Sfb^2z~>`L(>9!X%=wea*rML8=v0v0t;`vIIYYourS2cC9)u z(uYz_7Toa{Ov^FCPSOWBUJ>I+s;L}@fUO+u_=NtCP}Xf_lk$HIM?0(lr(V@wyY{OF zpLDEfbShPSG(L|iVN~DAdjC^v|8AWhu&$@k5Z>C*UEjWS2emB?Gs!jR%Jw;^Ld3`` z<;){!!ub`**-^y_T}=dIyAx+lIaYT3Dsy(g)aX^jzWq64FPS0)F)<;QflX!pgb)+K zaUseLAtu6^2MTfZbH-jA6Jj+xYfsP3jCyizrrq%)il0DN%{~J&lo>HU#c#LU&4{|7YYXC&NeT!6OnB2U*Ue-7UT6V%)fINfZ9!od-Z4h?Wh+z`&@lLys?RB?>h9eA!4!gp_u4w^y{!R zv2kW=`Rt^OGLim9oupTe)5&r5g*rd4VE0Vc6?AePo3yVSuxl4b632)pdbm{Bamldt z=EpM03OYSmZfMl?gRN~3$h1rBI#x$49BT^gMDM=qx@y#h3MbY2)w_}Hu-?;_Qp;jG z*(Ahtb}nov`P>HSWF?1ffJQiKQ^JX#p>J?H^Z9X#w}(i)2q#QwhZ{_voXm8h_D|FS z$CuVY@tQa_iML_DNg17lU0Y!ciTDD`~tC^ zO(Xm|D;rYSi2i)gxbEk=yyqi(1=@$pe4IUimh3MPB@@;u_UxYj1Tc-|IzbiuUoj0? zu&OS=jRG)pLKK*u2Z4w|C)*6_MxLo zZfh0#zX4h-eWu*wiKTCKle);}7TO-eg0Ix{Up$6u8W34(dcKq@g?4>~HUD_6>xVdU zOA{9=rHYpt{!aD(!|{tytt=b3vb<4UYS+FOWlKYMVKC6-X-Z`VZqJp#Oj6X z+~(bg*Yu=^R@k*Ai^IZcx^Bji;TibMs*k7{$xe9p45who#~v%;w=h)mHl&ciEAeoE zxDL+%o(vu?8$=K%6kPuzR0o~|+eV02w&GB&+1iBb!)vGdah)|D;tO>jzAZBmbHIze zgq&$G?FcfqFR}C!p9tbw)1iQGgB~yf{uPLWT^K3ye!^t}o#1kTx!_WPbqzLWVkn7o zM)c`9qZ+p1e#`2Ji)L%E301QFZ$m;&YMQ`rH3DBb%MN4WGa?ex@qgC{ohIt~T`pSOvZlpI=Tjog$FpL9$7UtyNfXDm>KiG<3jVuiH zquhD-pe?00qFQY^$5j?xhxHZrFiG4yxJVs+gN(%*IVn~}VkKRlcRi!93^=-`DnaId z5rD1lkxc&J3$Zf2&l>Q3(Cstuhcg9!ccwsYl`7lm%J@f(&>gd!u-YY}YUlbtZUo;v zMbC8u1v$Z1967Q3^iW@Enu_wh1`BOpJlA(mtbJV}?Z^(U6zBx67l`i<3rqx83Csnr z6IfSrbC$L@`n0`Gm$^A80L}V<-S5b;!_stge`$y~UFZ)Qq0{8h0uW%amb?{?S z6<>aL3x$OLdg4LSgBv?^>U#dkut#ra9iF6mN7hmk&=gm=yYZk;vM}kkaMwlNs)_uw z2edF$wXj@lt;KUVo@4Nwi04#1=itF{18W#VWlQy7C;ZEqJYb#Bl~1M_ocs4sz3)OZ zOZb=VD?l$9y4=?DB4RnL8sp;Xa6RqnG52yeY&UwdjNvFc;om8Vd-8sbg#WflDY@Gh zV=h(cbkX>&7HodbJ`YbefFH@${JN zk*EoYcD0C_&|6B-*F&LS?N=hSUkSBeF)r?QjG0<0UG84OZr9Gb312VVgkn7@{I3^& z&DxaHvrW9vNeVAQSyE2;dZWXY&-o<$YsseeB&?;g`#>1H+TYkuUxwimHnG^BorPMm zH`d;6ly+nXHwkotn+3YTZ2}X)n+4*o>#gcY1hYqYxI7ZN?;2~* z7}`B!==h9M&6+XpUuTS)oH1_ijG@oW$T>Y@+<(j%w{^z2eKUqWJ0s`LM%-z}4u6_4 z>fA=uol}NhdX)l)m$ra~j3r#_$FRTGPB)goJ~_taG7#q)eICzzJcr{s2G8;Pc(4;< z!5Yg8pCg*`CsG-S7#BP5QF z*5jef7vs4B&s}&vi|0{1f5c;9AcRFR3)5`t1UzTrxf~DHP%Ipmv_6gJXLz2%(}l6w zd_3#%9EYcdXBQq^F1H@S^G!UDSGTxvgK2!Z_%SAvtF6;C}Z6 zcOpiAr`(0-+CwjO0(mXuHz4kLT8szCGdJ5Yq1_^x>$J^hAty zDt*Uz?jX{4B>WpgdXBfl!M4gn#3*iYP@Y-ixizGpmGDuaxiqtv!_me_l>CVp#qm1Q zcaG;yBYkJWe``pO12~}9>y(mTBIJZJ=(BnRJd0gTy#T3`hxjBxg<8Z&IKIb3y2f*_ zVj^9;3BtLA?OpbCcg;ee!}0V^n34Nne|8RF`fJX`*fJx|{B5lQ=ib)#=z(bQdeNzff%w=z zK-r$hL4dV*yX(!}3D5r}w$ROd$Ik$m=GMbEZSiZ6I%MQ0@}VeGuy3#YIM*F)I`D>X|rz zs6+^Ha1MYPPg{?5QJjUsNdk8uUrw0sA&(hda;nIea@ZYW9^%Mb@a`9SS+me&m&V7=YkkbJxA><%|O*k56 z;=o#wP++;8a0CK)31kCdA>1sm+~GcVK?^LfESNLE0?WDFVE*6VtL~YR?JVqH`b<~V zt5>gHy}Dmrg4FNzqWee^uWL(K7)qG8Vpe={?d7|O6yrULdry*4k5NW(xwHg#^Yu8! zcT{)np}NXpR__qopTlw?nrAyR zR`IQD-pa1&9ytS6r{gav77;p}C;eBE8&ZwG1IwF~S}SdA>+Z44v8(9aB(urV;SZGD z4e7B+gjJ1>qD=#o9Ek)pmV%PwkbqV=5K_1EhZ1rum7x}kOwSvA-w|eWz&B*O>|oVb z{B41efa>It)U7vA#+`nP4JI~vQ-#zBuEFmNem4VuDCYC{kGy+{Vq```%UjWjl z4vc?w2pNqFL`EhGx>yr!0-5qEmhR&LbXOEij{AI5^e6#3hp`XS+J8U#F5qIex!Jd! zz$>OA-wrsaPZ;Hz$h)W;?Kjh2uZ-w2#qz4Ov$?Pq6wTWq&9&yoTBi77?&K}6Cp&K8wG6Dfiv>+tSf_g+eC?2HtrdB8{I{~{=k?$BQzu8Q18(rHLcKOruPvpo{WC&+K#Gz9(-Z9_ z<4#4l*2C$o^ZS>2IL4*6zdA+aD)#9rBqzxQADiHgJ6Tvq^kOZaQNXpt=GkJ6JJ&V& zCauT%wzvPy#KkGbUeoH^EzVOeQDf7k+(2V}F0V69YR3!Kc3Xq&PlfrhUByN|U!5Mv zS2lh%Y*A{aj_#J4ZrjKVZPEJKSsIJ1Bms#JWOHwu?)9vR#%nQ+j(7 zVQV=u&5g4hlI7CR4DP}lon{W5z6G9G?kuY(2K<#%$>4`x&1GHa1hFAK98J@aoQGy) zX-A+rIGtWT5&c{d`SJf?2+^IwrC)O=nE!W+JEIIvVj;Xc{d<^T|2yp-0e4tetn_RN zQ#}%USRZ8uUF;oq1#mxrSjxw`ykAL6x5)c0wb8##z3({KTUQ&o{z{?$;b8B(<^B6K z^a~I6zFpqdGb!}*5B7e6ysbx*H+i_2wU>%>>y_mF_Xm5wT%o0dw1mCtVDDGUTWUA+ ze%8U>&z86J=H~s3gT0?AZz=4}`(+1v?~}K5r{;az!QKovimneA=g&FV`?>PAeo@|g z5B9!Q-qw-I`$Y$PzgXVZLCX8igS}rNZz)jg=O23Rx&EjJIvrboXAe8Mb3pgL*o>Bn z@NV+LT|O196K$%D&dgGx-62)(H>k!nAYL>I16-nRb#kpuJ^U+G3%{tmu(tAC+N{^o zp7iVH)ND=iJB6Rx?Z@)l%kO3U-ox(`{C>bsBfSa(xg+_V$?qb5ZGKPTM_JCik>6+e zv12pyM}FF0S?6~=zg_&UP_91L3-dscEun((1LAwua5= zi1`84aIw~cgsstcI+_-?+=nRPVy!v}`v_qtgI;0FeTWJ!*1DRoj}&$?Xco5IhbZ7; zt)vNC(*)P9xKzr0i25zo+L^F5m`+F1qAm9!%C}gnR>GF5&9xhj_F+|TvDRLM&2V&y zY2MQ5jUo{6@QSw-%k*xsmP#OEYPZI!ne?_ zc+qo+q3DP4Gcc>X8fKP;S37!VAMELPHi`>U{+Sl86!3WXE7j?+KvKM@ev{XJZhE~z z(gJF~p&P?6G_tl#VprdE4)Hou2F!0%GvsFm$bo)o9?7}ihh zsv#|(q!xGi5R*SKeE7u^H~UVS=44Pq1FcI}^m^ScoaknLf*azN)OXq4jD}#7{WfKH-x3HSmh{bY`%*$zZJQq`{$l$ zYw_M}$4q~=ZDufglbPAs-Da}i;6}47pM8RvH@k4Uc2kS@a=FF(G>*6R#c{m_@n#=m zCaE(sn0>sN+1baMNgR(e%ktU3G4o~@E_$?!L#|#N7m$vB>WkwV3*yaQYo&(o~KFZAHvsasWvqO(i0g8RO4%*M~_CDHwYhk?EJ!bl|H=7yE&X~D;_Q_`6?9d_< zRH7-DqscfKy@(X4dXU=n-As=(z-5h)$xC9R3h8nl*4zZ+0bmQY-HYE(c7u7GiqZL_ z6qZlp&t(i=(Agr`$sVf6>lMY^4f^g_nz6lNEpL?5i?&H|G3W+ZtnZt94J_K3uY0f@ z2=8VKZ|4t;BF5+C<8|oArOKwhd3OK#JCMoTpM=m_v0?52mIL9R`F5y%1d>lN^g2s$ z)vrlbMfHS3>iY2dg2#5P`^!`px6R6*jfG}y%&DYZf4W)i zelXn4YJskM`=y+pqq*9XmGjR%CpXyy(n|Y#G+q?+~ z8_doI#LLy*%o7A%;mwG>N|cB30rZdN%17rYpy4zB41?^hVr^Tg(F$_A!p%V#OqcwC z2ZDM*2h*Sh3ku#cF9;_;r}Sm5-JXD_?2Z*z6gkCmTsFHSoZjhp;OV3lw`yQ9YaEpt zqYj=U0Xuf(cD>-`$wd4IyvePkh-PT*E?NWD0R*#K!W7;v7xIJgDh#~f<-}8+-Wjgg zh=p6ivO8LXI0^|NJx^o&Z9`@~T9wTk6X`hG{pr-j7MAMJiKyZ@I@z01ZmKxlOW{n* zvf99R!eiP7-b-oM9^%)V>Ce8w%wYD7W@cyKWG3y?o6WL(_H}07?7~Hla}{1LSK(0~ zC(%-V?LiASpT96k57UPq!cK4RaZ(gE|1artDe5NEk9JT1l4bg{x$2E_5*76+@u~Bg zOwcYxtnup;4G8w0MDgx-264^~@u2}(D*H0ov$JIxB$KuEL{`4e!esv0@>2oOQpF>f z&CT3rx%a6oi5#ft8>8?owpM#HB4K^GzZYq{y8@DH5oZ(&hce<(M_`FVIY4Ij5m4Ml zz>&9ueklRtAc&WP;yG%5T*0AB-V#4CC#T}#=1N87n#U)pgxVWNDqCKL5k}@+O4st~ zvx?X?evmoLPimd@{9w%HM%yt@=eL7jzxF*E1c$(~{|N7KB^@pZ%WIQIY@7jD=(5A1ROS1#E& zL2MVyJndK;I_xG|5OW2TN-n`45GS)F^1nM>!GG~|d=>e7GBSU+>Ir?|6|^O;57g-*6z*Ua8$%q)!NPvv zm@6Z=VufbA*!p4rX&nlSJA=6*vvSI+nU$S$Ek~()?Z>H=(l+M>29$1A;Kd(SQP8t% z3lB?y(OVhcIvB$&huDRwA%Skzbo}Tp$_rFjhf}?kIRO`n`FF=W@6Ez1$C@6l2GsCx zA>4a~f5`*kkCwdJXuOu716)dZVZN|WEB>P+b zqC{lNL8-A0tv)Mk+#FP9f3_vg2X1#+=Gi-NZ_XY#JPMTP@fz6h@I(;B*qVAL%Qxw= zDnV~?j)?L0AGPNkB=h+?O?2VAl zKA|_3(DU>024gZD+`m%ylO;sI*-vzNy^x;$DrAmorR6EGJIOR&;5EQ?fxq_{B*hBK z(GWCy9EmgqN`z629fNc7%Qn_9FPAsd(gj|aoBWck8Jz%)4??5U0ITTX5jU~LEk0p9!PlQy?O@H( zTqP!9#og@T(fQUOUut~L%5ji+Ds(;s9qv&ra)xmu0jHKSONbt=!D38pF4mcxZ^kSo z&>Ka@V#{$o@zYg&J`VLg@OZ0qP%7@ld?6^j=oMB_!^vN0r_4y6dsANF`T6KkkWP2N zB(x{Ljc~L!GX+1CbM9SY1!&yQy=WlE=(svPm1hr)5>Zb~@i7e z7h)G`Ykl0S>p;-1Ff^cFV0t3@x z{U-;rb5akZkDYPdJlvPqNMYSrfHpSsG0EBZEGDn?2{&q!G4YH;wYGl@TuNFWZf=94 z8>6`^vI{0Ug@B%a55!l+r^+6m#8h4WCa^P--tFhuwu)2`YPY zjAx@}L(>?oS+TynE0c4jp0>_-A8T1j|pb!V=e7~qs?{U-h z!3j8%1oTQwseNocN2%g4{F|_HTRv0u17_B%@-b{tR#CY^>ZDb+gQl zs>EpYATi*4>P!?Q-qv{gC9q+Gac@Dn;P%XEJ+W`=F!I?gPfjwo*7u?DFiqGT=>xn` zswsN1YW-{{(eYNAfl;c5L~A2J?uQx!H=ih=^^@NzFg=$OtAJ75R@yjZtYB(;|>c@x-?K@ zna?7JPa_9^K}@?6O&?Qi4p2%+xtrYh3rb+0?;w}noslCju(nm8V_SMa*O zAV&MVp?w+Ndj-Z5zrf;c@5k*<4z&L#_3}*MNig=}6!)}`Yo*PY-L0YMtnNw&CU#mpw!MF8 zcJ!i3aesb;GpW)pEvz?IGWoTZmN4@MFO&HfrG-&$TV!u1)Aj_e3Ns2-6=n=4)RJc8*+Nq(SfH!!&(x*aTxY4uli-H0!peZ{h+u(EVlisIa}`wg3T~*f zG>`J!wyZ$=m6NvDQdPQAVRS82)TlI9Xr9HoGcWXH z%i$;k;rLNW3=WAFra4yT?uJJTX((IHffWCZ!|~>>$1=4dh~A)HVjw%pnQ=C5D-se> zMW4;vf}EuZqO45HU`f497SA!4Ox3}Y$dz|dZi5AtR^>IPw(a`!=)q&>5Zb6S3VABP7^|`mJ*$+B5z;*l>J~ZjWEZ993E4-%B zwD(eZtX1)CYoKqXUi)<0-^M4YzVCtP9xY2fPNCKBK9soWd&@~>dKP>Z!`0JgEd@^1 z>~76gv+{p&H<*uU;;uNpNLbouX3;x?mbU_t++J%P(DwgjY!(CHqdr~|RHv6AtX-v` zR@^kiXX+RsZkit3yv`qJRJ^<#gN4duwoofBy21#=lTI$G0h>Ed}C~wu{FJ3i%jG$%^zbeqc<2S zxP+c^9QPF>uEH)=K90;xs}>T$CbiJf<7sSeQR!*4QfIYNsR&{E^PL#q=m~td8C96k z6H|2R@yTqZMl|ItT!6o3Gc`}TfhwA1tv)Lz#v=Pi!`{`Mf&Uf9*`0IXFR4Ojk zHZe6HOX z<|eJOZ6Lg|X$^+OQY&`QKo_GM(^PI{gI8uzD*9w%Y1qn+q|E;p1A29!%R`kW@w=0p z7c@Si-6;cz`NZd22}I1b)w?R2s#$h5&)oz1uTM$?F*Wn-kqke2GBBs-eFQQ6 zn~Fnar(bMbafTAebQfo70?{kV5uTWSDFn+booj1feBKAlV*g5^p58=Cr<3* zq*IF+TD8zC@d;@4LSMN{U~3k7#XbS8UFa+339MFF=quML zu(;4yNK;^Gp|4b?z=7VRzBZZy2YZTuS}KFuP)~VK8%r^l_Vf+4wJC7fLSJ!9f#sgS zx+I5tyX9&}JH&Zup46`SnXg()!@f6D*^e(gBR$JG{~zGAf2I-ti|EYfzbfbNyH57% z2JLVn_5GThm9F#aazI=><3L%Ysz%K7lF^ILLW+jVkiKWIOp>->(Kb6w|m z<$QkEdB2=5>N>xNv;J!|fnUbrvE^mZ%&K_yJ|b5dju$Zb7C#n72PGL z%`POPdlDJ(;@-{w3PSWMytlmoD5_xrPI@|a&!3ZwcGX&r+Km7trCr|5pH-k&i{_Pt zkZaRJomm^$bRKvTUpL?h03<*Hey$sE0|DjQw8oh(Vn-yJp<6iMY2mfPK0vmJ{Db1s zUhuoIBy*&!ov^!>KFsrXcsDPkq_;gw%+JVO8{0I8=bUn6S8cmX$72Oirohj?rGc98 zFGuafjqtx?PPx<#f#P__oHB|KpYMj?l%*Vm;Qmq<+Z2aMM1_rB=BLFw9IdXxdtoY zrY%emHg2rsHZ_4f8^N(s?w(3Ww6G_4dnYy}Z5G z(ZRM~qlT<|-&fxmzOEv6fRGh_lcF&0MfXzOmt|N)j$ZFmFOva8>RMl zp_=T9N^~d35&HAU56m|)Z77Duow!=YZ%nku5-MXIQK{pamx&(guc9&BPowH+c%pKP zqcWF7U7gA&5lM^nkE9`bqgpVh<6(r8`9hD+>cmQK?x_%np2mlr%X5F1I+|TF2|3!t zr{g(Y43GHpDaZfM?&#Bv&Bd;@js{^P53JR7`q{TAqqizv9j1PZEZnkQNJup}FY^X* zW*8@Xb1Dtf>y|Ovy5VwGpPcP71Mf=GD*l5E`*x(KV(;LA<(H7{!^)elp{m39x-<4; zM6ZB)tH50?>fxo9dy69GFCC9!-WL+2O2(-c-purVXN8E?FbSqh-pEk&vgWB+5eqZeF^W(7^DL z{Fr0qY4A9ldtg>_E^}Z-IoM@oa^w(J8Ydi%k42$2E?rEe#|QgZ?9I$uBv)(G1C^)D zzyH;F!gV_uz#o(+Qla-9s~v>oIKRd=-qpDwdL~I~Y#;Vq@~?AQah=PH#`+ZApF@oS zYbZ3ZX}V8E#&LEX4f%C&xWi})g#^zJqK5b@zU@TV$$EwPKll?SPorf zHuE7M6i>A$D$kXZ?*)*QaUu_+{{&jwI5n9d)C!Y-xlEY-!kb84g4 zK2cJ7C4|?_6B9|;OC~fcL%~q+M3wPH#XU(m??yjRYSl))2SSVTPVLKK@@`Wq{=($7 z{dxDW{=D14m0<6eR8Q;Axh-kXXwxx^b8hA0oGTIh?MbF^H2}hDtvEQ}q7NhpD34v$ zJba#gnq>6y?3`|%-6?o~p6xY2U!Kh!nrBI>uI2@b*EQrtVzVXb~^eNA}fZ=r$)S5>rn8-s_fWKFYSDG z1<`$ovbBnS@KToJ=5B+vTckor=#5QNcdfgkf?0pHi$xqidMTl*HZWBAc@(^SS?vvX z67U3Y^d8ad@5|l>U_j3fj7?MSHR=^Aw#5ZKIL`oii8Y%@Q1@OuM{p5$9JF zXOOjuz=E|^gkkQPe;v^khk`I^^AD=qf!&k$9|^xpSQ|BdtG;eZ6Emz&K3|Nbt-f*Z z4|C}31%UMyg*DE(&I?m4Yj@o~Qs&lLKTmnGye?$Jq37v+p9$o4FzGgE*!!8Msm6%Rq0A2X2&TjxjIH z4P~Q`s*G^EQqR$ThKqBBi*p6nJe=XNqWWQB4h7YTCZwk}arNN?C!kB1vniZiDb_B# z)Al9?8OmFR?x0*7(V2!}k7D<62z!2RW%LoVtV9`br{}NQ#R$ql);P%8U4;}v7gyT} zQmwR$^HTdrT-RrisknTG4^PYT3B9r${Dn8RAE;=*xm&c={{AcUzX^S+prm+2 z=7ZPQHAc9ct+eajx}Ad#Y|AyvWlTWUz2P>z2J$OeRU8QO<}~;_Xu~h(p`vxN802wF zfJp2sr~DNofuCFVd?1(QYu8@3tFZDiWWS5ctk^@lPM8EK2P>wA3biq=CRuS{Nh7H8 zMjNXvnwYZ6@-qyss9XI=7U5W_W^GNGRt{gZ@fQKh&{=a-r(ZO!8?w5)SZ~uHL;LH| zquoXF4)60159o8ZeAt|47{BmlM5D=dEi&ESP1K6?b$kKZC{?{SG>tDhw%eycHi7}3UWv&a?q;pNaDH^T}Q zc`IzG93mEAD1k}YeY;DF?Sa!c?^|j!jfLiA2`eanI7+iAjNbt+dn42`>S?-n; z*#B8}m50u|u)SIdPY&CBa(^q_&FamP@s_`VE4Efa?Q0KEX5LL$%8WagF`7B?LOb%t zeYuXIR5neaB_x1Z6?%`sTuFJa?DrlN=zV>Gn5Vh)$L|+ZvV7X&e7wqqW(4v9Fx;kW zH3Us=9#UajupJUc0ta?cO2n6ot(w>GkR^A5>HkOg6@=I-0oBvS^fJRZIsyl&c4>ll@#-?NnQQ z&SDv+#Yg2i6%FmPSTb>SKB=f*P6no>Lqh6#^%sdu ztVdxZzERNmDZ{j*V}=oL5r@A|5U7qqv_9c4^&T#`I-B}elakZT36;Gxs>5VytiEBx zA+f5}{Y&k$i&f2eeSZ>buOv14q`f%W8<`uk`QIvi($;jFzotUjfq+lJfDQ!6Tznuv zkop}-gd8nbflCvJQ_@c|vc59fqegG#P{4lPdWCI}mDEwJ=;XoSd=i*LaABx0_ldI` zSZDb(^aFR2_%m2Jqx>(5vF**sw0*q`Oe5TyxgY&2bLC{bcroSj+qAQte+7}#P_v)K z487UUVR-FVYdo}o6^(N^Bd_S+_;5X&d=kj#fv}JM3mBa*@)?c(T{xzoqQ5VlD2Q-;pl%yC<%SZ z?tan#EX_T|{4A(f9d4Uq0cCK@$2uz~f-ql`>59GT#&Z|H51Je~1bF zAIS)2e~jU^hc=~IB-t6pjC`X1=2J&DKfyHGyb&wpMMyt28ZI*xw(~PSk+|Yz;h$qb z;1_}`W20a48MQC{RA_g?d|&+i4{-7KD@^$NwTxi)HyB=fViA9aF(aSow|o$W{KJ_( zxL6|A-(f5kiRI~a$m9o#^Y{2G&OZp;qe4+zfv}uMEq-TZXeZ z7Dp}_tBn0naff&-y*W(c&SQA(z1>JvhUFC%_z<0Z5=c_Uig+AKU-D$HNV!wOTl5Do zp+6`im>t6K+HdJbqcUa~GxCX+@*y($FM=oXT!#1JC@l}E!kHf{&NBXra~P92M`Q%E zqcXCy%Q3w6C%aLvAZkOLF@zcUM-@IWAgsgqRz>MRIEGHto@?Qi`(!CaM7ojy5E29~;`1`!M8Xh)UT8HI8 zc!cn{(T&lPe4?9$rnW1aIRgHE0)N$8N7-A{zlX@PMlU*&0C#gP2|VGSi}_RV{rD(6 zietAjI(xuivB93K$7 zc4NTFI-mIx^7}=<{Cdf7LMoY%2J#OqBs7a%A?2Nr^7;69Vy#Z+y0&;LfM}Z-+Agmo z$+^EK$$3jMlDB+Xi>z#OTy$`PdFfO1mEbgy(uF;bH2$(bjsHLS{ugs3I)P{t7FVQu z^NdB88;3CW0WUg{AZ*TwPLhe*Rq6Ahllexc@L~8S$Y^w`9FK4;xKM7gaGKydSjtyH ziK%|Y_;i67pT%cj@#8c3M(j7BUd;X){glghU%El7H{Oh(e#G3j5uXiSu~TKF=F$;A z2!P|;$y0Q>2@<;J@{M-zf$nd*bVEB=uKMWB2>{{OCIixoWKP)7cwShX$xaWb{thPxRDUlcJNpM2T%q$v zA*uaRyYN58>&4KZdAS6ml)LTvTWO`249N0pEWAIF-TEQql`CiW+07BPt?^D!M{)(! zdkk7G#SyJTY_BZm7M__F&uaWo!JmR;=YGrqAZvtwgylf^4W0jd7{254@`>ibiEiOD zK6-$2Fj5ti!;w7O)A+zRN`0jse=%<%MI? zA$;+WFs(}avdsxgVc%^)T0>MYced|b8sd^?w>+4P2Es^Bdkl82AX+JD8c%tIS0^-*=BuUJcPSO)fBZ6TF+$uE3*pk^{|MNg$K@ zRag#$SM%*$BiOurB6J>&W|?DfJd-1;Wp_(TIbf5YZ@05&=Q3V~b-^_z8STr`*a+E_ z=l*PEtMf<*#nziA2}Wg-ORzhSBA&r2ifUF4PR+Nnx%?f?6WNt;$Cdo1>atBQ zV@<8as!jW%HJK;Gk0!*1Fu#wYS|NGnLbe8*7DqK95b%m(c&Tp zN_k^Y9{ECi7v)XouIf8nl1F<{o&l*BA1COR{NpP!fy!fagP*}bqg)IGas_3@a0P(l71(kTaB*%Eou+%J)v zrpQdHxtRsV0`!4u*C)RnV>uY!# zhC6NR#N+qGGd`mhr#NoeUb2iF$OV zZ>*v=+lGYbCN1KHWe#OEmbnu><-8*``Jd%r`BbUBax&d`#)^goQjNEb4Xpu=eY7TY zpsq3X5O>giq!7g4Ans+}DC=b9f?M-@IQ3_wxZmHfpVKPM_1R{neH(Pm(;YDGJO=*u zc;%uUy{+qfSUDKUZT%Mc6V#fNvd4ljQYx30PbD16F*3lK2uF={cD!8LSPejYG10q( z-H+!0D`6ZXE9W*-?{V~be@Ecyk-;ET=)slI`aa>cSbjF}s>R?_y24)d7lhsZ%0WqF z^jX|f4!e1B6=^Iv-kr=(9;OlXI2UD^Matc|=pSXuf6Vw#$Ep5h9QbO=5uFcPMzY34 zk;QZ6cx%w_hbCj{FteR7)C}E|!&No=tgK|Gs#q&-U&-STE_Kw-Dkb;c(DZ##uh^hA zTa~LnWAs3{67h5%4`wIkGq1L)Ge$9Z)Oo8+xgGmC)XXfBF~VqgJ5IsbfbKo>m$toVt1Zj`r+=P|@XO?`lP!uEd;rsNM7 z=Kyi$@)qad!h6#=3uE0uy{0auP8+5h8;7yk2!e2Ouf39Wa^{#`s1oBe^QTtld6lgOicM zkZRIy`4y=m6xKZ3#-j;@MJ32LkK};dP4XScmrE4tP>*^SJKteEpjWjxm^V^lm{Bfu zdu*6HrA=Y;MMQn8Qi~Y z0~GhB6bJWby1cTXG;_vGW|<~3(hK}Oyt+ELy;}#n!>+#C*xuQ#gML*H`W45MYeq`# zN8#mm9lHWi9QC8y#4(SLaJ^VxS#V&USx*!4k#0f`TZiSXI-Jcs0X`2{9e(YheA@kH zZd&c@t;S+gEIc1e2^P5Ws-Fb|d%0fP951C@%0YN{#5lU4SNYsL|32dW^WwN2NvBWX ziJ99K=RovmO06Gr=Au#W);YOPF*RN!`d7to)7y3m;2G zSPs%QNhhvy{cVzPTwC~c(vn%Cwy>MueQD{Y;n|DR&||#VR}kEFKPGnyr>|!TQ}!q$ zFUF;s-Yq8Y>lPELzO@_!9QBRv5MH)%#NwjDuG>T%QMfx&+cA>uOKCPuX^xaGYJFWw zoj&~iN~+Rof|YIFNF$sZwJxKu;lW-rPQX7C4aOR!1PJc zK5&BQ?}h1RnS_%nNVCirP^_3`Zp4_k-m`ZNl1FFCEYnw?dcHR!)0+{{*CUQ7p){X5 ziGIjK4(Z%9I!@)Z9c*EcekWMt?TfM2#-bg-(E;erpwR9Ninao2U(@p~IbZrBH9Oml z&Rj}|LeTy!j_AR_qZ9c6$Q+vjPIiE17jUWtzXrFl!Cg9bTT%O+g1iF8;^!!qGZilJ z`ru-(v-`Y0x!CLUKCkb}OZqFv_Bj^sZv|BH?Io}FImab9v!R6Ow|5F4|Jj_RyK*io zgUv2^nOuS~YZd^76krwr#S~x`0HqXQ761b&z$^d;Q-E0j45a|G09cv=%mQFp3NQ-yf^M!6LSGLT)P)CQ+g$7b6_6Fn?fe@N}=7T7)E#D`87H?*S{^z ztZww~Q;eV)s64TS=O4f;atHqf6#C|9P+NCpZQTSzCTv$Fp6EM*%!P#EEPlE3Lxvk{ zE=vkqXk&o(YmhaEctxx<-dFx+e?>>_0ItZ*{u;o6@JG^N+zqzrQr4&Z%qZ*9D#@Lm zuM%?!x#yC=`sWuIf4Db3+ixe%NQGkT)-|MaoJ&B*tLTap$Q#uwyS*`F*7n+m;{P7e z^k!5h(ty3TUMF2YnYPF7Vz88*g-`Y1uYpF%-OZJY#n|jW0-?)(Ek@^cd{U*7vdeVM zXoWI4$vg_wP<<6==XXefV@LNIwOssq%-I9TXKtKOQ2V{4^ah~ObE!uI`E9QjkthcN zl)reoYL`NOnLeyhXBZf04r5-gG>l=kV$L1Ww|&nvVew>+?;apS+dN zK0f_n40u?dUkLreZG7Iqr$3AV59mO)f=9>`ibG8;cCzPDGD+@UW@(wcx z6SI(*4^PYiXRb9vcc>18xqpk_Nf^6MrM7PJr(xBY=WXGm?~Is_G~##RJFXo#x3ad2J>4jatC@k6_g&hgz#5x1CH1ziug7^++EDiNLbTS?vueE=Uemr)IPLiO=C$>_2Kaz8)A)E-LI|3D&Fdr zJlah!(*ozQjNLt5F^OV>RaMjNlyv3n#;l)vLEp{4Y(OYZ?oaNE4l~a}7grz}AmbX1M8CnyEo1^YF*F@Pci4X9~54AA59R?etkXRC*D=BlszC zx9~fQ-!^_AP3&syDXe=sj){jA)+JW+{w8N9 zjhXh_o&ANfzsK2`WMDmnI)>Nc=6nJ8mDP4c!fq8~GDI$(GQqt@&Kl}G`{urKk#ot- z5iltiij!j&FQJn#a_+=Mukdm2dOmY1i7%;4`q9JSw&=Bj+A#l+| z%ec3q$k+XIbB{rTNGsfjdX-Q$HYnIT1MIKhe9%xXI?;6h(Ww}%5j}`vx=+!M9?_%T zI+6nnDYZznSbkF&Zn;mX)OlxzP*+++YDd_rkQqSks8GL;G-oS0_cln?On-KTnZfLs znc3NznXLG&be8PwDrX62S365?c8#;-XV;o#`RsBtZ+5h!+i13VFi5V&?;Ejp*yUr1 z1z~TFnf|PAW-uF=nVrp=xqLQb=FJX0VpUqCQffxU79;9+=@Ya+jaH#lwCYGud8aW-wbcGdsJ~Oysi6S+cVwX9;Hu&XSuQ zGRyMWoS8Q}lF{=W&vJEnE@YO|HZCQ84$9IZE@9;8@dQcqNH}d4$gDf4o~@-paG_mg z$TKugVEZ9Es2z$r1!h7*+V);j(s>UZ+&IDBiy6Pq97}qR0gm(Z1!P7~z~)k^>bn6N z|C!grOvN>@~3{j5`O@s>+@A-a!1{m*_y?~ay{3t(=RRoI>9+<4@*LNZjt;z*I!4R634Q@$Qpeg%^d$;ds5TnO49P9$Q_7}u6g zX?wQW*G#Mr+G|hc!UFfgvEHU-SSDoj|xy|aY#iwU;#AW1V$LFl5^rq{{>u^Tj-U>nJ0K27$ zo;|`4^leIq8W7G+pKxTmj+Ay;v_FW*MEgUS;f%hEXba$If7lT8HQFD+()lQ#IJH#&-qQ3ozUliiM^MT@*gu!lC88iC!NBtGt4zZ`rib?Fe%Y5aJ=6L$^ zj>vqsw39(pX3Nzauf1W53S{kC%(1$+?gu^>F>K+Y#pEW2E#6A3cRgc?pllsqck1a& zWnGQc&bw{#)?m$i>sMKzYi0fPz7uZP;@1k?)mSI8AKY|KRgrPjPR?cbeDMd)IUwg< z?eoV9<~u0ose6|Fl5z*~keu@$fAt)iaGX4UP3!Za_!rMOQqE=Oe9je5KI@T7aF)$^ z?LYq0JHI)IbJ(0ecy@5)C!T|Iq+T0k(VvTMLQf~^NN#bub~Tm{aOlj|>rhZ~#=%+b zYK{A;en4bIucHleD{_Aw{*8<9pO35M=sT;?e*sYF%ZUC%nTG<@oz>WibU6P`w_r_0 z#HC7%iuK)fBwqX-b!uvR%ZZmUDdItk>vCJzaB#q*HE{j5pLq?K?DR|NG<{!fv0KGY z9(Odo!)$Wj^3gQ5>Y{62^avP=m|GQD&-8n)=&Qh!tH@i++(qT=Z*rHAZ}IJl^42on zE--K9eFtBikV8F6GK{jU(M{^<;K#QYtgL;?W{!eqI%Uoce;vWM|3tO4wP|k>czg6L~_3>KPR!Chuch{(Tf7_BHDc>FkdHbTnzf+ z{j%D4KvNU?WX6!pOHbvQ6U}A@^0mhu%jf!u5o{BqjU)55j_gmKSl+0H)vJn)ayZ7f z6xNnu1mVi7++5a0J^9bc8nth4b5@}5?`DZYR{%FcTX%4aqm_0Gfm)^{n}TeE5`)5^#xwio8uZRUBpI zBKkHVn{;!gtt&N-_A1fqz;CYYjMC+f^McOpNMyD_uY4d}p7z3}T<7n>8VK0Z7HoYU zWDDhB-$>SDU&v_u9cYfT(P*ODK0OsA`$z1S{`VlkJ(}M%M#9cZp~37ejFzCq)E)mT zCx*&}wG(HS3$eV!3!*>r7mSTeWU>DkM~UP1q*mo?B>=er-275LP9F3!!0b zG&&HvzB={TLrHyvls0#ExR5E-Zj>&mmLoNAAY36*--9({x)HTs(Uq1H$zEi?gj8P! zj@zPV;)9VedKc-8Z|9SbRUWi|F#bMx>2=Npmir&gj5S}Mn4_mH&TmtJb7QkJ5Rd8n zd;K~ujB6cO+J9T>Vz=gh;kL6>Zu#$UUbIf?@3k)R7wEC)_J`18{Ag>5+L$<6cOb`; zXlPBri+^+wAId!ABmObA5-)5y4s({R@~Q9!hkFN=Z6>x(=JtMDd(CwP$fxKxL!V0- z8ig==EpGa*4ozEekLtx{;#S-0H;?wMeT|<(fy{-?LEHQm+90iwZU0gEqtP;b+kY!H zgj4!oia7@Fwy%!1vcii>dO_(X=@isvN{L=;PHf_P`2-t1YFA8*G|m)ab&#x!zX;BT z#%V5O53s4wqzIvOHaYM*4>HNlQB)x}NDauYEwQ+u?9GYSl>0 zw?XP?^b;jzJvCorR+lC}!}K7-ZjN$o6wz^C-ny&k4()Zcxs8-yTQ!)lRzcVJbbbnr z@p<_~FQFQuR6Qh0w#Vx&7Vb`a(;`o;fi$^k=Uzzk-erkYf5_RhU8t6>(vNny7SQz% zc`yDsLCnW?(Xg@E7F68eL*#r%MeTo)^iX>kqtH#h%_UTDY02nU*rV5dpU!W4XC%_{ z?f(BJ>%DgWf2F-uKCgteq>G`3vWLxKt#Q#em%FrZ!-7TM&j{cPcGAxEVT;o6_Ffv!A`SXml!h1f(om3udujOK zVbj25nEMQp{P*mpI+GXr6w9FzUjC9yQ!cf(lb)w=>q@PE@8ebTC=1_{s~7*0@aSJ% zZh5_@_>wGX9vzyT*(*4FW+G?L^&20ToWuBkAW+#?U$~Nn(YBMNF9?p-4K8L*X@_k_6MQmPg$@$(+b3 zVM`k)xPerX%oZ2zB zm-4vGva>U57;@NqIoBO3{|DxASz}GYV-WvdqD^?@jL;wCY(MvZ=YqIWeMQY=F9~p? z$V4uW1Xeaqbku2KX^+GBkI;1enTw~Ci~j^j?U`Y)|4N;->i}sRMf=gjaTwa0+2L%( zhK~Gzk!8B(wl-yXw;>^T*eL&eP?XyH(~Z*h#2wFokD|w!!hlwve&my6OuQs z>uF(^u$kA(JUjE$lG|tKu|NGw$r_mYB<1N5-SR?7QEj!_L1TP3Oe+IJ+X%;tW@?=U zV2ObgXtR>_BS4bV9lnjo2Mf0et5DhJ#*RZIK!B=Up80Z8XXS|$WY#NgKe`jxc&oHQ z*I*t)3mVoVdP@%ZiAUA1BZb%7FyXuAB;5U7keQfyIXVccZzH}6bcM;77wUQ#kXNAQ};*%v0jg=wd&f z9$IdGS^O%C{n&|CHNOzQG1n+6Zu9(D?OZ|tWFmjQfK6x0?JzbWFYy`VbslAV7fpV$x-<- znWLfWTgO#fHg$oYluqjr<~A>`>s)yjc2>jJ_`G}~>Te@@H6L#BvWC5O;;5VWa|CLQ z_(xTv+L+KkFG2LKioVL)i_5H3MP)Rb!DE}7m zwO)K3$%h?ydO@nWp*Q?nuHj!;@M9sxNAc+n_U>n$EBY5W)a>D8jzh%bc&k~n%I>-C zJGI2goca^sn&@?$j6+WG2Jq8a0MFv$ntWHt^vJ)`pU@E6zuL;3pV>)0teb4MZo`VE zLF_O*-Ac=o5sRJmYEoIGEzE8~7Uf_@hP6N2QInuLbAVUFL+fIuItRidCB6tc(d!VH z_+HM{;R#}V3?5tWBP42qxGpRO-Tp=gNwFHjqS*%vibpM?xct<4=V37$!NwCi*HWf(@hGnKMhF8gC76=tnT%?6Kf;4C6q!VR3|FzmJ+lnP%51 zUt)f}xKwO^J0R+aI~UnNzMZ2Xs8iX;69dZ$TNP1lOWY)xL>DPKZMll>bp==Tmi8di zRGCV~YCIff?@`)Os2UO&;`bDOxx`G}f33MZ3749*zD6%f%+nJyPE1V(72j3-!rD<2 z=QW<}9%iq*m)JSHv-elDdG+-mWZVOZN6M-{_ne|V9kX{_NIGJ21eV-hee1fW@F*;K zd-|=ere*`q!d`vry5JE~97fwK14*Q>oOw|T8A_LSf>aw)$C-tzOSsA{80D%nim=s7xcF4r?`{98hx2S4#KVV3Q?q~w4h;dr`4lu z<}^zqrPUCIxG~;hXS7_f`)oxc;7Fy#o8UwfFrJVkgk$D5htnM4T5};sI~DurB8G`e zW$P5omg=sHG}twEnWd7gj0)LABr@S$OxvD_MMOg*igdWO$1wgw(%J4p`9bH&QhFyu z&>_y82o?W!L1dG8QevJg^D@LL5B4q#&IwrqU*pgnvNt1`qip@2ikjq}UWbYKb%|sku#cqO;#>Nmb(C=GnE*WQ>8r}P*& ziA(fgCnR##o0=zq;@;GB{kn#K><<~G8JSKhDW(|I2s#AotT ze(2Ay)E<7PU#;!F(;xF{1COjNy)tT()I0qZ-r7FbN^fPKYn9i zYp;`-G@Vlz;{Qo{y4*A_;f%Zhoz_bdt?3qkon!e#Z=eh@Hl}ZBR5#_gp;WD_2g-4a zP#j!k;c29UtFCBszYFIr-fML-IbQLo=d=rVAmIP-eI z%U{_X4}mz()(U55_Y3n06p94;spQgF-siBQsp<7UhMjF-(oC7CwY8?WEaOoFYgb0U zP|?BGayDxR{shmPyFBZG$espr>%ZaYxeaKwbyI`6ZRA{LMQQ6hdT^J5-Mo=^mJd`# z#Y@b_X%uKzN)7~^^CfNN;L2vh1Kd?E4Ggc1i1EG8GGTCy7ESUTlM9X*flQdy*?ogk@UvSmn$Oh0BvOA%o) z+&)>h%Ur0+=2DWYzC9FiQwkpDO}zNU|H!)!jMZ6m^F zw#8*p_&uv#=ZD%NxmUq&KMAoVBl+1g#bW0yzO!d50uI2)q~DTH{2;;Bdht1ld2V9v zNX!Q(=6Q+vki z!N|>e9qG?(%95zfoX)pfwZCbaQPF8Z$LUoY-0Y}r{(d*eVN|MLOH`^>--~Hj>9ECw zGMDknHuBs zi_{d!RXNFQ=e1}Kl6{8DGLxsfeTEa-Iqe$c`sCa+F`=lFz#hTTVHUj`oy&1`9?oZ8 zzIyWgSPlm;$vH+w5VbJsr%R?4xZxW4h5%G$q1D&=(NEOuJ(Y=%yzS`mcr{jF3rz>jXAh|WEj(FiJvQZ5|!;w#{-#Tz{FLm)OV zcP@TfzbSCT^(&E9g51h=9syz_%yq8B9B1Y2D$IG2+FwEe6c*e`n>^W)oV9sSrgdYc zgfp{pj>QWey?6JED2mR}45sG|x^nJ3d9I9Bx#Z7WB&SBSW?{f}aSAXCfJ;(TJq z)_Razqukk2CF5;fqH33+wEo7{Wv>OTSuC(ZE3IMU63%YF4SIc`Qvvy$i5KbPNw!wu> zDeHdxVJJ0s7v|1bEK8mNNo6S?lcfn}uyIZ*na0tnSXj=tywqAdm!lNzEN=^j3nqnx z;nu=pZr$1D)f$M*X6{;(>PKI)WXorqUFAvB(XFcIX?aTajktxXwaF$DX+zy|#<$eZ zm{OMlXZQXGnJJHL_M*{YFE3lK!{`*G;!0JCU3|}^6z8mL#caFf2ql|eLoQMiJdD|q z8^)IqAYwSx7#(o%=$$y&!E-@an7N82@t9q(A@-|fXKSqNSIW+2SjIx9Q~#6pcunVc zggah{hAE4)=UCC*Dsf*&fk7`iq^fthvdsWAJ?v42%e`>34OM(5;Ve2H9O+%$s&11t zEjx&mwf!A28+J(v+j&D&FfK{)_B0h+zk*m@(#EEah*rai?U@J}HM7k*>^ury;!lIV zmC-bqpTgQi$NU+Y=cF8L!zFEu<6xV{)d>^sNLXC%V(df~tlzEg!(Q&}$IO{>HrT#ejXL4~l z&%4E+z=Nh>3r6SleB$c~6V@N!KIUBowc)?ysqUPA6oPlwarH^T%5KD=^3|jz?sN$)}4jq zRv$l)+R^gBMW}IXWA~(OQ7=rLkVW&x&inD-XmRCs3u0IirxQ(PuL#N-`&?4MU%}R->A; z3ES8C9V-%UXNG(tW`K?O@x;ucpn8ku>M)LRmJ(;FeLDraL+uXtSo5Dr#?C)+vgbTcdY1h#5yKhA9efC+VFj%_%<;t;^^UvIBGovH9ZL%$lumH zJ#TwzCX=0JoHvV~0Ph&Y{zOjE+jwL-@pFzI zxs96KxXpzB^Qt0D^Na^bw zLY1j=AwE$I(lV>f$;Q`0$tJYi$Tj&ka#a1=dg45VI9Z?_tuuMOPSJ(UA#TpYmUTmS zyi@?R4zriG;8gHCR~sTKd{~X~2*aRr0_}Iq4jnqJATUOP_=#|7`tAw`B_0MtVI@W( z9fs9-JBGiFTu~2kBn}rQIul(WJ8TWqNW9{s6ef&W%|W%E+u)lmX2paq={_3L)~Ii0 zQIsqS-~O5u)?mgVnM|smAkQ|5YtR5K3YN=Z${-z zcFbRZ2GWfw-a>eg5cEJEvj9U70EBEzmnsC>CigNP(`G{u0E9560TlwR4UN@sE@G}{ z2m*kRi)nO(KvTeldJLyf92$ZEAmn2jHTL8(XIYBmc}G%x6Ss*_=iE5h*V~Pm(^RHx z6rt7uJ!f;s4`*1Z3*!68kj9aTrv{}=P)0c_kF1&lezo&5s;nXToc1S_H_;Kr9}(2X2hE*+{61V&+u6x|QRZ^nz_vlkIZqZTb?$zje`_Rh+)Iz(jxg|0 zN&GLMd43YxsW_7I$k--xI_dKQZBo{IIpo!8`15#?Z@p<4eSk#gc zoCP^QinCx&hQYA>N!)bR_n9yYy>uGfukL~g~c&jgRz z@@^cXtdNd!9bGUwk{yrEgyKjz9-SdGS3AyDWJdCpk;2w<2*Z_!g?(zztmV2;g*4O=9Oer8!r@pP-C#M_I>7?7VCw>NPhrC8dd}NXv2@bZ6=-}J?w9jyMSUadVr0V% ze%l|1egBZoAZ3=IcUncU{#yMs8}r+pWtn{l``!G8C{OxR+c=GRo7QREApZi-c01UB ztr)hm=O!ck)|Rk+UDt7R*#218u`+BQu_Hwr4BO959d66br@iQOWuNJFY%j=fQUq>P zHRVow>4Uoy3GF)l{|I7fk)oA$wcNQGaTNVhgQKkREcTo!U9`p3v^2wg7aJL*_2n?0 z1JC-4LgqYVbe7ta&bQ$_ox`xNg<8TmkUr}Lg26)0O*1ZHOb`|hgr{hj zpm|07CCIQbTa%54W91QKQqaGYNkYA#w+2Q4(lsjS8HIQyHBoh zN^j3!dU3=8qh(hx(~**+#mK^ual_4I(8>Ou+t~10iN8q%jZ<*ZbFb32pUOVh{e4&i zn*u$WVXSE%tvu6MJ&fN=7#7XHM`Pv&Id1Tpcax+2`07kW*6yK1HGo|I9#|^Zei zOa`>cY*w-{N*F&6>_lHS(A%QeSbJ!q9j;5$VBV$ZWrXJ0R3&IdA%946%zO30$tfI? znq)Tg5=)J%JIi45L6#m)vUbzs&V0&`_Kvjr2l?eP*W!1s`FZ_*u2(tFP1I^zM$>#- z*qr91Mun4I$7uW%3Rfz!=7{x-j!oXxikDcwsWI1+h;N6*_rpH9|8M2_REjRUUR-&; zSmil?AUv&Gp1&`V9$cOU4CDLxdVZxhiBHC0lE;IMhXOrtn)gmtRq7jcj(sn0rUwJjl`S$o6ENpgqlLM<`FXeXAD|+TTCEuL(I63!&oSVgP=RVs)FMK9#W^K6L8V-Aq zcpeEFt#e&Ws99ai7PeQ|l3TFElf@E77ZSiio~Mvp1dY*Jzwnkcdy){#!e|8vHq0Hu zT$n!yLo^>OpD?-r1I*B+8@Q#=+O|>TSFm=P_qH{9Wkut_68Gf2+VKbBufK&$Q}S*L zZ;QiV+8*9)^!eC^Z>NqL?FqvLa3n3xEzo-i`JzoyB_%>__=2V?)@vo=?1MOQf~7r_ zVdie~RexUK?l9K6XnN_*k?s9y1L9?Q7F-H~i%EVE{h-^7(Ca2G-+23x=OxVzz@QJ` z>%;fl*^2e;U!=$^K=o1newVU$*aIp@w4eEqB$mE#USCrX^!jW|eY4{?PvG#`*wnFp z(z5g_sOwr*`&HM1EXzD@8-@l&BN(71qk%G0n7a#LmeQ2aHMY;I$MQDLH)<#}x_4wM7N zr8YZ?*&`X+)F@GDX5Dgt_JwM?2f4q4T6yvQ zWU@mhT&BANB!V*uVn7r@frL#~1IWHz=uQwAIz*leLO=vWMMOk#L2=)4L2*UJxNi^z zk>~oJzV}p~KI8xUJ5{&)&SZkT|L4u;GhOGNsyek-ojP^u6nl{7RpghxUC7)+xsRmW zevcSB&Q2zl(ZGf znl>o!M6tk{a{l!9Z8m#Od8U9!(t;YXimTami%5i?Li8y5?k=tyJ_X>J;PD zv0OvvauO<##{I-Z2xdG}G1^8nKceRrV|^84HgEZ;LXrr+_N-u>WT1-Sku-aSp%Pn& zWbZnNY81u<5`AGMkI=&Gr(5@^VzRdspQtL(MwpBTh2jKKvrJf=Y_c7+JuxuC zl589)TygS3!P?3W^%wZOK%d(B0$(Ipn^<7fwz9Tg1-@9Ywx+XM=+;6?_Wt_-~ZwzVeQ_9Bs~LgJc=%>$2Bx=Ofj! zO!al|n7c~;-7aH&Jv-*20yMwU<1*LRYg%9PE4?m*sc*~VfXhRQtmPv`MtLdJPDTBP zg{N$`V}_a(q3kNM5MxZdjB%g7*-n+UGMhEpkj*Cu<*K+4Uu#{YZ_bXnFfj8gm}41g zJ|=%(?HJA-?vPbGARE}9wC(y%wLT{seUZMTXL5(BIt)Mb7crr;V*X%1``0hwCCmJk zko{%l)EG6zJmwxM#X4e9Ry2YejssCi5lp0#jlQhT$xe!mFjB|s$f3zodh>%vxkD?n z)VC_jfIF&EsF{ng9*1Dg(7ChZS1;GNe#;E#hPPd7+pIf+F_Hvh)?@{+ zK2&fk(BImNsn!I^)*SEbE%_ZS)@w)pIhwe(l0T;#EBWM6O7mc)nRPRW+evk;W4?w5 zDI>bPo(SR&Z&1}Q+GVg~NH_^bzHB1fHZ5O>zCCwoqUdADR!F{{o8&77lP~0))VT&D zCm~J21kLerc#U!IRs)xJP0fWt)UyX;q3)KM2Zk->hVfnwf9Z5Qc5-A_#m2WOqiCQz zx#xA%hyI#6&EBFT-+A^z#OPpSG4%o0+&IMC;l_n>x9Ct}aryeCEXbpS&2zeWfMIl~ zd9k^}&5L{VJ+Jv(`yOc?ZSMT$3Fa2@GwQKdp0QaEmQH{MM4{1z%cSM_FntdFvBn4!A^r%^(r zK=Es6)8%eXcRCd49Vh;%cJ58gKhQO#i#s$5b`3^YxJcoQWZ{ef)I(}Lwst!zdAP*0Ctjaxk zD<0)=^7S}f`H9~`JFmCX?PkRracf6Jx8cNZ;>SHZv9I1%b|$`W2bs6CM$Ut=$*6#L zv~e{a@#WHH^5BGauPYy5J8fhK8nOrm35Sotu1uu^C;1oKxU(HG1d%<(~`u|o6~Vv5gDrDpEUbbTVT zWN$vTKf52yanuo4LKmN8dB6_Vv)>Cg#Mad#jL+_Dv7K9E9$$l}i8-vMV4R!|B^LS% zD97+H!6{6BrvIb~&Thw+xRo%#);_0K3J3$Q#c!@!$JGHJJk}h*@*CDzhF`gAI5K0S*0Xw*Cs6T*ook!Eo4== z9`om7FxO+l^K3|OIYAu;KI^mH1t_-d^DC+XssFu&i+_ZM^~Y z0h7s1WJZooc+G{Gb6%0r7B7>Gt(y`<#H|-oB`BzEkb_OAQ{?7ar>df;u#@Gg!VCZ* ze|adHT*Z@{L^v&pU;rMc`v5PIizd;#DFXC_CRxLtWn}K{QI&2__Z79X1N@d^vuRRfX+Qx$)a%T=|fW9sVTkVk0c?23UK{pqpLK zL>e>m88a^;%?C9%O`f@Pnzl#@?|hw!2h!|nOdRE>f|=9wgPMuejnht=RMgoJR83;p z(A*2Xdy#izxoQdn9ttKe0a0HTOkRxZ&(^6MEsYN64ki`Kg%$CJh)AJc0E$AlP}#ya zg%@!HHV4rg@TkxAiSUSOClRS)ux>CG7&0fQUBc)dwb^j%)gl^1I<~M&!}VI=&Ni}O zq+cjCjE)4jah)Y#d|EWiXx6dA6{ zxtr#$zqp*VLryIl7cqP_CS_|^>`dLtW$T)B7b58zcc{62M~-geqdeZ*Db>+Q z9VMmu_0FZTuG|q#x9j&QN5xas@06@row>6b-rQ~v*Hn7O&CCl5Hqf||V`FmA8fd6o zJ@}vW5f{r>fNNIl->4p{rNN}3(dyE?G-X(AzS zVq2U!(bkXi=|!vGp*r1mI6u3dM9w3i8{wTMk2K!uOky_hrKUE$R+e@qi<$aRxyrN5 zii}dX5=g=@bD1^r#IFB!8rRBdFsa|AZp~F+e0L0}9!T{|-PNEJ^c5B!-NjFrN(CPl6=sv&? zw&!H`nUB{d!jG|Qiu>@7*%t=U3{3}VX(DTL?M2QT-ApGAYPXs3;=O!f-vB`VDfqpbzUCO zk#|cU4#oSClQ*Qj^x;tQdQI9(9}Xq28`EC;a431b)_dvPxup+>QqEt`m*w055N}8j z251j+Ep=u3_qH_*8$VOG^R=ehb!R(sX2FZ-qG9XhN+6h&BNHk*qNs;ql?FbHe%{i= z7Wj#8v}`j-zU6D*mT;ss`PM5O5knNI@YXAZ7;IgG0}mwmv~;9Tu`#I9)|fNp#`jXl za+SmK=zTyirSBy=U+?Fu{%d!NUT#a0p(TDWfJL9bmy-!krL9U9ZMpx~wAHqvE%*PL zwz`yP%l*HgowYlZFShzt7pk!(lpBA*>U%ad{6VYlT>Jr7;U7|k|H@T(SE|C3`d+ZN ztMAjB&qLTW8nli@_Ov5^h$K(a9UVKp`F!VroC%LZ)^}SH2nAja9N%>$2r$nvSNy6xN< z%2C^p%J$%GGZ&&A(G_C%pp#N^T0XrHo|&uC6P31^dHlH6K3An@C0S{+{@qhpf4{;^ zyn)<%{gH{SDv8^_%%Ej~D6!zSIvow+nKH-qoqS6@Ac!7SznJj#YdSI=jhNjWdiv6h zboFq}qw0d&+J*3&Ds7QC!}D#DZ>ihE5USS)QA(j?Z4h-7N@^=zN-l)+F+OfR>9C<{ z^KsVe9UrH)GH-UjPqi`s7E-965NtytFjY&}5v6JzUB4B)Lm8UXZ^GxeKH&JRvg5a$ zdV5QxgGv2P=eLd}F*|R*h<33xX!1^i)sNk|hr4XZ_)6z(sdlEOp`BDK$%8RmA{!WS z$8f3MHS*s9UM_>z%>V{m9f;j@^$`7(*GD#TP&BLAM|DOYX4)H@65wG4*rWgh3h)sH zpgiJ%U|Z}jKxzJ0bd}~u@oavKpVqsSBhbGV`r|@>Lg;r3?RWhPl3l-c>vj^`viv&Q z<4``0whJ47Z?D*sqMD6A2_?)de+mcj;(a(>1$*atMJ`w1(Ab`z(b|uGO6K(GG?ayG z{AowyGe#p9e-_tBIMoFdy(CD6ThQy0;uf-vg-3T7hkI0vZ0kL8a;^8`jC~=+kcAt! zQNQtzyE6HXwHzniMjBSOmxx^*=4@ShiRBRuB$rmWNtz*u;^#E>B2i=XoMo?IQYq(Y zYfE}kDaSXqVu=qEOC5x%)&C(*O{kOb`Zu z_;7+S0K`WUgaIJ#6XG69C?N3Gf@*yoJr{QoOG2iPDJW4sn$R!+zA?yrnl?U@HV&@* zIG&L-r&r$zE*La@;g+zxG)$l1e(+#)KdsE+mQyA+&+4Wivb!>$$4j@{<1YYkcD|N4 z_5F&bRIT@gO{cnB_BiZhGz(W6MvpQqhBq`H!!gZl`(8CAf$iupPvBp_JAJ>@=a=QG z?C+HxlG*SMcdzv7q_u~3o)WByK4rI)>hl|?Xb`>y8h-Jyi#YFNYjuT3JfL1p&3!tl zIRmI4%~#LDt-Et0>rC@pa-kVpiFn8%k+5w3jB3%Z%kdXghlL=Yu#K zXr=6te`+JUMk`&z7IKR!Np=0Dq^=DB@dY7XNlzC5>m|pY`H7Ba31RoydO#rv`DM8p z^#*|WN`f!|#8(r90U*AXAPfNUV1h6J#21CQ)VZP4tnDQUq1l6dUcQ9-dJ@e5jyH6> z!RA5TYfy-9Bq0m{@y!Hb0EmYYgaIJFl^_gwUf^y=aC#n0-Y>5M;C(&^Kz8hVhs$MR z!cF1iU0)JRDxdXXYESu&9-`tb3Iyci>8%W|{H(m0jmsQ!g&j==Y(P0LUA<6gwh_*% z+5iyWP7nrw_)dZ_0K|6_gaIJFmmmxP@%;p00EizX2m?U;FhLjq;ztR>01!V;5C$9+ zM7vY}_IS)|RVqUKBne>vh@U1113)~SAPfNUNP;lHkN+jOH)#A@63ij$hL}4*y%<~U zociZujJ2!n-8u4SgXk;NUi4Ld(pR3t)^;MYTzn0Wjl=Net)D5qMef=RJYQCJ*h~)# z%>b1rdXS(KJs`sv+f(`4Ea?oG&)4xOW9Zl6XCuS>2AJi8UE>l>^ZqHpoj7UY-5~O5 zgt&hf!l6ykvA)E8cq_GOe`f?hTCP3~7t#gsk==)jjGZQp9^81Znv-NB?% zpL{(sLcM(hTUH(;s<}@DlRsBB=5W5vqd(0i{8CF8hmSAiyEnU{tMS+4$khmp1B<5o zsaO}YtFiG#ZLa}~Yx3ehkk@mqU2=NyDLP+m6HKb`6L;X}!1y{67<%^gAoB4>;MG?P z9EvvqJ7Wyn-b7$qCv8_-FEsu@f>_!fK0b4C7ly0~4IWhFjb3dD5+iPRQb>DXp{vl? zpK#nZ_#Rd2P`&w0%b{8C(kn-W2!<8giI%e=9&U@bLMK}r3~RdYZ*>>9Xt#X)9XzlnFZH$wKP3~QI$X_tKba^iM{ zF+Dk7?+zOWk>?0ill&E-y~Z=V>V<{LS5tSxt7?Uf*N}TG4#qbrE5)qI%BwPMc{_-n zQdk^7QHne)9}627i;}n>r!SHwI-F%b?>zn25jU`nYz9_9;Z?8V#{&DX2>+OoXK zg6j*y#t)NBxtk?ssM_UcplAD)h1y&+cj$k$9$v#nICnEtQT|~xDv^QcQhn!Yi>q^8 zQu9~PIndQqd($F}>Bs3~_3j{OW;xk!>C54$ms|#pA#;K1CAG(`9q&fowlAx? zIneONzYAgX=`vO9^1Zlg)!sfFJH1r6`aF+jI!dEyq~^`+g?YA7kBuN9dM#h&^zI;A zJ1Ad!wu_#3hN(?fR0|u=IWg(<9fQ>_pb7hIF>$S6l*33#XRV zGQ<_3?~|Wocl)C>VFZvjRhdG4E*PtHVh{&d$fY zp~Qruf^~0)53sg;N7(p*a&Ln_U&DVsb^371UQ8u(LCfV+@9kZ|{BjZb%+>mGHbX30 z#rl_vHj=)t{O%%}M-|GG<6rCLmHhvJe>Mmiv`sV2hW5Y4yW$Y^uQ17f62{pKOTV;t zg;H|sM=w&vtK6rn7n^yojQcW|o7q&4RaH6L+5R|TWg#Dto$^>VmycdbXsM54-)aT| zHWhWLjy0_%#IxJxwB@vRYMkGEE^-rSJatZ*_gOD(jGZJkR}E+OvD05ZbFJZ8X!Sd} znwV}R&GSLq#$(oO!_}S{_|v={=>M_%W48rb$Ogf?Yx*@QY5y%*rd z>VMX#7?nJMi_DA>{)_zg@-H1LeJB6b;l?W|#aQDZ`wdPOe5rojGZseoG9p|I-GOqp zmd%!{7xrdNO&$IA<5lhD-fS!Y6Evp3&Xw}Jn4)W?Tr9U--9M~Ngz^1`b8fjB`Q^~o z;P_rD5mnG^p)*Sad25)-TtXhQEW26*V_S1pafR2GqVo8CDpkj8 zXe}#VCfvmQ6JYlFbRKSE%*4m>v(e$g7|n}(Jire|b2;qF%M_nrbT;#G!NFO|^FLbLJaY+osQ9qDlgxkN^~#)3+hdF5^G9Lve*bbzghPSp;tdCc|~>i8pT ze_*gisax-_FDL8$#C_(alDkndv}$?SxQ))`KKpx6v!C`}pc^#|)JivZuLpQuQ_GpF zKJsE*0dM85{yT-I2)%uk=o;mIPNiZ;6ewJTjr=KoD$ltCdr5B`;hfzTkG~IJH@FWW zAAO3DU#0WKKS)A;`o+7V$<+cozku9T8+H{asLUa^z1h6uRw|X+?!uej5?+2Ki;?{wXuMx8GCl%)rCd|gbX&#Dx zNQGcOU(;xTK6@DfZE0kqWPC5TW{t zjge>>^u-}g+-dZFO?VlUD8#=NW$r}OmdRj@BXr~$yCT$E^xgiwkd-xuSI|o99p7JD zo7#@dTgl;(_9^pNI>bjcqBA{FYPq=1#-C#$9)xupunj{PuOK83G&Ig+%*5--T6eK_ zLDA*DShUGX>dS8OsFad7Rx8D*MZM=68fzA>wx1g!u9io*8fP51t(z9AZKf&-r=+V7 z=8Zi!64;k2^_EJO`1*X~GV*VDyPdXz{iCK%GhCnnP0duw*>$;f%prx|(mGqhX=GO- zmxy1NiuOKObEm#Avi3()rw-VpTj*AU2iy-HSqVIRdGWHfADSM@^%&bwPdrBZCPmVG zw79fl)K$Xbt`+mcnL0_bFl)+6Z$hvRp^_CRUS%{zZDbWBX6PP{#MItVoYFZCp3*ru zdv%>7#c6kX2+tkQ+(CxMhPuYzPHtQe@w=#6Qr`BQ3$vbdjgs{Y7hFZs*?Nl=U7#Ff@umW;($*XSw_^rEnFnsA^){;Q z(c_VU?g)WHp~@r^$-s%^5p+rqWc(m<1i$@%+-g&#vc-z+0;ffw+Zel7_INuSa&u# zw>9EL=Xl802xJFZBRIG0tP!%RXnPdWRXQ5~o9G(}@6*|Ys6$7aY2dEj+-lU9SnCU% z3cX5AUb0D@Hz!$ee{!C$w|~0QzyJJQhn%|7Uwgr>LKb2vg4UO@v6M^tCtSGeus15q zoS+!e+3Bt(Tw$A@d~c;J%S*NM3$X&$M!1h7WyGAB%`r{z=p2^&?&>Knx!O_}pcvQK zqeMTVn_@p1`xJ4Ndah)xCKhiZRJ$3gCPdP*nkp-N`@e-+mn36L?Orrw z>WkeLWzmX3@89Xx@<$s;`{@_Z@Rw@tNJd(a9YdFqG060webEHRlE@wq$~i?k_J0}R zSFjLI{FHgKH*4H0jPB$s!PO4V+T*IMvU5Sb3e-SxFj@-1o=1L8_L2{mks9WdOCI?A>y^=rfkTh>LDq!+IWfiS0WVove&(-&Yg93&9mMLM+o%HR~eZ z9kbEZu9kFDJ(;kwnA-K@y`Fh;bk=Teym#xZ-pori4#U|2WF>n|8Cv=mss!#c>&)4p zE|+!Ur+TSQ>+$@AOijgATm+#v(AZr8B)G^3reM-3E?F%I5>zoH3DcjQ<(T{aoXF=2 zYnXBv=ebRi-7!PGQj}W>W%}#&(B?Y1&}aCm_0TC(>l#0`(nS|QgMMkO*s)2ixWfT| zdZ3y~O|p(KH(j?PQkZ3Tbl}XS-&4%|h5BK;SrH%GTNpgbc-k^<*Wgk9m<5{;B&X$% zJFrX1V!cl$uv7;o0gQJ8!p;T1tZ9C+VrP|&e#}4~UU3=nQ!HAnz{XSU0$;0VI7;GC zhN@joP-A){wZnR`oR+Hb^}Xexqu?TH`}CHAHa8)0CHaLro4l5;Uhe~P8=@X+(kbVX ze;Ku_AKzOzq<-`awK{L5uT>rem{P0vJ)K&m3K8QC2Ch-DkxW`ctMa{FLq}ms16v|| zvxfWnKz@{senNc=MX$i4cJQu43|ol$Zu#ge+Oal5<%^|38cxJ$i*P;_s)GpvmPf6! zzPk6$HB?&XJXZ{G!Au`Ip{0|Wyp{*-(T6BzE~j%IuQ6hrTw<4s-D<76=A zW@P`b6gsf+Qyoc!hL zJqW;kMa!_dt7I6hT~sn}_*gT{5W-jT90qfzTA}Itj2XSv86@v@Nv6miAz4SZx69zH zz;$-uT!^EfwP$5xUEr#fb3;clp8$?Ip9tY$)$S2+v0E!nt;kV_4k^mH!K3m{$3JTw zy0)MlxvL$vU}3uoko%fq@1J#cWP5$_-$)-r4&i)Fi>URISU#11pD)2=D^gLnYWVrGCS{y zemN7t&W>3R-WZ#IC#@K7Q%%Vh$^Sl`d5swwXjkccTj^*H_zOa|N&0zcQW;r7L)ooh zQkimZuEsM8y-1>8&g>CLB>ifDY+PYl>dwVKhDg0H7v#*KnOhTn0xlQ7rR^hKROfT2 z`AB#=TCXf8k^&7Rb5f5Zx5*@P$U|h5f_;NAFS^4^s#=L8I~-XtSSik5GnbrKii>;J zNc=LcpRCQ7NPMuI8&jQSJAGLFJG|(ai$_iv+OG$90q**7-M03@vc|gbHg|T-} znS*Dz2*xt`PINo9u;~gI1uq3K0}Q^Hjw|dhY+v5rooyW1=`LDje94Tr>UNt!CU7-T zsePnJtj?KCsW!jln5KS={^YzBJ00Bhm#QOl7Q=K}*&X8bmypIG{n>}s*?wGqPmt#^ z?yN1sS$A01;|}X!xQ2>$SXT{pjBKwCVJT*Lw(;Voj<~HS^kVm9MoBC7CYd{RinRJG zfB(ln`0Q2Rb$P!&>B-juzzZGt4BC#rpYz{CNBKSf%Yn5P;TZmPK%3}oY)TBTakGN& zE44P+OlfmRAG zDGgb64S5U=S;2mRwI%yq!j)@#m3ZgfMMPrWZO=7UdUnhLl>dfWZ?^FXni?wwCYQkM ziwhk+fwy|ZBiGXyu9YWrM%k&1;T1iqk&9I$D|V|M)cm<>0z(o=m#r{Zpg=YaveF9| z|NK;)siJxLrd@m0q}$Ee*zR_-F^aQ`Za49Kghal(g^g>86Z!5IM(S?i7XmsniwLvREP|RuzTGns^JgBBfV01dNe%0m*vP`B z>MlBFvC}cJnc@0n*7eK1D_O+BE@FQdtH3X*o=O)TvplV17JbLe`q1r;xt%#-;;-rm zIX~~DJ3`(%0`rb*x63mx{X^ze>IYi$AEMnh8_y~ELfI+qu4+82j%4DfQ!e$8iKDbF zx3$U1G>~5MeJt&WZj#uL+S6c8?z!x#nFgEP=oQW1lcVONj1OLPb23p$OL%^}lApgK zuH+Z@tax@6Z5gd4w)XbJVcSVQqQp6u`&8Hhci3i@cYlKU7<8*+L)}%*(lo>S1h6eV z^H3|+(J`TG6lW1rk?-9tiJmnK-3wx|z14QAJ~*?Z2oo#;<(CpK=Oz~w4C zgk5vTNkw>O5zQT|h|rkDPN$*Ij;!c~3+q{fl1OG8T_FxT+P#LeZ|gL)OS{vQQhg?C z#z;$M?%jlb8(4w0+pir5Annll;Q%JB;JE{tGoLE25JtW@+7f#WCXNnSAE-{GxmSzG zaQMBOP4SVO-qWzp6p>US79ky8@n+Km`3+@~qK!EM> zt8E#Z6=H%E*sru@Yzt!z?str_<=c;8SFK}H)t>(`<|Pd#oBwwnG2PgXn{jdK zjF^o~O>V@bIU+Te=ZLVoj-*L{?B_C=Ud-IbKi$~#KBWw@W$E*A{?U1sjHOuhHjtKk zxV<(uM%bolM)TT*wace$n$B;mU#Qi!hxnUM=fbDG%5a+9{9LD-pTA&s7~LYD=!Y<2 z(N8#BL5*&Pt=6MgOqtDgK6YRxLto|=QtHl6NH)g{=zPSw&jEvZPV*QNl+c&uMOQmo zXu-nmOv-V+>$$~BVMqR0QFw%={9*!^92Mp8VNGFRyvL{6C#Uk^s zK#;d<9dyn`Cy-)f z2&>Zc&mQcb(>FW%9fhjQVfCGD<=ar7ofKC-L#xh(f*b!*q{r*ZHA}-rw zx218eYu2I)=QBh!QIO7dJi&z4%ZT1mjk=P8{=HhDw^ZpRtMa%D)9tNO0cf3n!*BI* zj4!S}7k3OUZC`z6c`)%0<}-6OnC4z=a3|{pkQR(~OP|98p0qSN5|g66`e=~AYVwIg zIIIgDJKQN% z20DQU+JWPxw08eUwZAfAX2bgDSB5L|{RUygjn2m(;m%#AGU6^V zf9(fd8E;e>7giR!aml1XpL^f5 zNuS-yHhFrVWjjvI*DgsqX7z}qSMFZf-Fjtxe}Jdzb@lm<2wiITNlcT<(U^%pLW}vd z>+hbPaK3hWJI!Y&X)dcQa}!>jCrm;%$`V0&TxFS?0&TWfW?ADPAbJzoPZIgW^hDs# z7{4e;VKH;4=57@Oszk?j-Kca{GBJ zz1)6YdN1BMe9|wBFy)`51MQ@?qocPVYEmEZo0yFK1|oeTunWrX{wI{hHz?1SQ|_zb z8JhpjB*`VJ3Shry5;Mgsd+AU2yOm3KIY}I+6gZ=t}Ma1k*>qpkHidkb7u`_!)_0!MJ z(&KsX%qzPO5MXHa&5l^f^F znfy%z;xIvBqn|LY-8oK`vkW_nsrk**pkEH*VzNUk5U9){LY*Qjl%2_xtJv!mww6jn z-$^3*`r4KONs3M=k#qSySKs44GvAtx;e1=w|LR-#iTPZNW^p~SAP_&@669}uHB#-S&7{n zi9SZA%zpcAPQ(ugre^BRIoF%>*r}hXH|KqC-W{oVQuP&2YI>J;BFTF0k$uRyG!H0B z7`>5w--HV&?-(3y^W~y$Oh7o6oCAE3YL>kJ1UhIU?+46q;!mwR@v^Q`)ds z9a1VCejW>qFCb~ph1<=6p;h~5P50H=RNf=&l!(z6Dc47`rjYA=da|Yp>-1-t;3fOj z`yR5vdMGp>q&$9Vmcd^)Gou5d$r?o(&aTD4ZC}=vYy2+Bx?d*LlL}5W>gMn<=s8(u zF|%MLMr@%>5vsNZ=?NRrS|4&`}jW~IM%sDCE@C5{jlZeIP3Kfltp!$YP3GS9Ia@>xC>RI z_2tWRc8zMZzF@g4mOoRymo^svjxI3M4fY{<KM(y|cryjHJT9L1n_Zt}#Gw{%blvgq77G^hYfR8d=6hdMdwlpT&fMz9D*x{TKQ6tAI<7db(gS5}HHZfy5i z!uVC>i*Y9Xv4d%9>5qldAIqim$K2FBgLc?Z^ik5T&7reDTbVGWJFgR#*Zwv0YU}S( zjm-LjN)uOC(kbcCn5vc|)%jLshx+2KbX99BSB${K>d_;4TyBt9`xZGxPu{Y~M)#;%J<(^SGBj`HUhZq2pQjt|6HUo_ zS%zkmg}95&#yt7yFdzS!V*80u{75ddhP1DxFQhwPHh!hr5yr?@RHJ;gPb*dF1$Uu~ zPU`p~WJhx|%l2kWtIw{0?se+3bZ~p0tt*=k;=j`<+(-%ZE*^^1wKAqSbQuDi8T3$p z&+@ueQXkv~zLyH|dlX2$hp*+>Xi+(s_OsFZKv0b~kG}|4f4=(mpHh7*rd8jIJ4Lds zl%Y(Ee_11Y?27qa0gK_#-~e@{*gv$>LS zioU^7OSc^mspTCPAmycuyLFP-DuUF9Yu4;n!CdZUhd^v z5ht%>!o!GjZ(*G^fi8EM$9kchW;pBJJC)vd$+56vBG$F*dq8&wT(1%l)wL9x)8SOp zTHnB}-U<;%7WvB5z0M-tBE#$rGl$IHHcJRk?Hm}$It2W zI>ChzCzd3z1pIep!{otl24R6pG%KhjMR7ok74-oDvvO0cVI z>X`J)wvTm6*|8Esl8bF-bxZlohXqNE-I(OqT^yKs>CJ|@Ai9$jMtj74nGs$?f62D><+9R&HhnpYo=>eMc~|04cPXrcf12E)5cNaj545D{kwo^l znzeJ|*HNoT-}cuR64&78h8#!I4@2fy|hjt2bmOf08K(8)VjJ?)Z0iJf^;;?U?=`@RVz` z>eVgTZl#VGJk{tvuumgvp1o1q{+YCH)H;#B;aseT9DhCfrLz!6^PnMeq~a}i*xH<5 z`A64=$Q*JkMLpv>9V+BYcNA_o7nudesyk*)NR|NOmDeIl-|w`hlNrdgQx?%|dyZFY zdclEOGx2M;CW6`aqPcy4$4yLWOwUa)$MG!U@tyYcX3B&tSe@{Ed{2qI7s%QH&!u(4 zSj|ZPc0A_#%=)`BHOFJ-GgzC=pk&4!)zmDl6~p#`Q)X$m8Do~_aUwb~oA3p@n5V1R zAV-Me(<>NH zjeXoT8n?%|@m%Z+`?3jdy%t%X z`W4xz!a5rNludVkejG7Eh7;I_^;O8B%hgwme@ozrEqI`@=bC||*<$oLG6}nX9z(S_ zP%%E=>Xy^UCx`(nT@WiR7>3qZ>9UlEWcN~WDy4R1Zy$xr&T@c~WZo4H^U36$w z&ZIVp0ER&hXJ$f>VJ!b)`NOuzGNGChhER3dt7_f6g}yPx%mIdy4yPj9Rt`=zD+nno z2VD2XU(*f3+;aVy$PCR=GK&cJ7vQ9`W+p*qlr2DVwESAKhCnEE)(_?oAL%F0`*?c@ z*rN-hkE@>{h6(Z`22UW;$mD7x{-Uw5=uYHmCa5l#7^k)ju2bsjwRtX>|4fC`)_YO{ zV{gm~#p<@)IGB{!coo}ZJ60u6@N^1mGgE)g(PZVd%jcFX88ka0TA#j59dh0T?{O^s zQM&rZd&nvdo#m-{4>tpuhW@m9Qn#*lHBb6`Thn6va2GLjpUaJFPH?4r)HA+~IxRWn zBV_H2WhoyysvMx&?lYH*zfVMlOin{aFg0L9CPxIRDKQ#TD`>%uLv&~h0~MPGj0K&m zEjOdrjj)2_jA{(FB$NgyV|MM-aE#yfR5HqL87?W8jKorV8Yy-bRLWzF(WnMuUuh?W zsed{g^NB#k?OT77x%k9n4BnG@Z0oE(>df{@2hrZQYRow4;aW^}Wt{Msl|n*y4on7} z6q{XAM*o-kf3$>5Bqy<^{>M>U%4F|e$|4`e4^TyR`5qDO;87;uYJQjTHOd70dHllo zLHqrN!eQCmDe2Swrv%R4y}MD{DF&9heT?kgPZ9*Z_rat3xD}f58UH_M4drWT?5Qh#W(N&FEf%lqq zz@WRecZ%8_?pP>{KTVP5uj0PGjv%C%%}b}g&t~`jBRtU5bJ`=V%jld|(9=Apl_<0E zxmWtaKJ9bb^!f17?Q{kGZ_=&4>VJ_gc6olo>=VY^?6&7y-4}00=CNySe({M@yiQ7c zojSz}NlGWy=~KL3lJ?SRLz{YIO1Ng)YjTR$m1(bwrg+6^FYNTCN^(is3k}kg*QT`B z1yj6`4|Q^gLSHJ@`Dw2+rg)v1_QG63Di#L|9fD^~@xqRB$LpLaUgxI0umh4Jh_#AN ztdpmBp%B~gdhrym4QVefeWeI;m8cVoyC*5HEorZpP4VK8qZ11$TPhak?;S4=dQ)B; zv39&TBT0E7CGU7~T$u7gVASzK>YegJj@$7<(3kSMA??M!J>|ttuM>+cPRff-LB|V@ zHsu8mlOH=VnEVyvhQ|ubWx@Y7pE6_3bj|7LYcvS^S;(+IuYf^l3w}$(s}t&jsZfeP zEtE@Qwo4+!&P{`?t9f!?e@x4P_c6l&Q-wjIA^N~m`$ zl%4`v3_2J|p8kktvk72IH2$rL`zh&Q1ko9+$m_#(wKGF!wu{9`Z#g%4pVv=J0| zmp)HDm%Zio`r}x@vG5lV{tXHr&BA|VRUr_ok8RV9uO>;XGwBN!>d<_2m)4X6dES~r zbXRM|eDoDC7Oscqy?L*vT$^2T!3rf8v1rM57wRRR85g5g|7wBr%~^K$<&BmuIwN|h zu#k_bHySSL=9pd#XISTDqj~l*Y|Nd?2fLKH&Ejo$@s@8s8#TFn{0<_=+>=y!`ylpC zee*<6c_WK?fXVe2Tfo4=gejjH@NZR&p9JyqpuyYl@jJfuZP&P(t;$dVIcc8=FF{?>y9P{p^SB9#q?J^PlMU^?9YC z>wizPjt(}Ce0ApHyP~%cdyBlxzi8O_cD1Sw#heX#ggh(nQg^Zbatr?{kdQ%hLoeryR*iHXB8xeG^uecN8nR22|?DKwzqidOyq_Mge54PXt$V!>o6Yl5z z_vs~aGC;Q3X>hdirj~zW)-;W+81ZR;qQSEf# zLLqw05H7{BYp?n(jpSrWUG8O_Ey6goq)4uPW@W~qeJ8Z9`dvH1(ufDH5i`X@bRmXq zJdBH6$sXw0qHr#-kr}Z!$@RYZzO*lM-JWu?Q5|ROAfye^A|Y~7RR~_DP%vJai2g_; z=y8lEp=a-U7;uw&u^#W9o3U?R2GX%*xTzn_q88Vg<`x!Nn=XOWtO+tzWllSOG#7eV%L9P5s!J}6 zmFTL4F8^Vy)Oer63K+&p22)9c?MGMW;;$k0*jdTj8(oKVn3n%hMWK2scObOMIQe9x zXm0Mr`~Lb)yuT|R=OkGhuk0%5E5Z@!(?r@Hl^efRaE`F(vGOsU=+s4%e3K*C{1w&@ zRp!~V6I%t@%=vu3txa>2TgYp>V>XpO7&rN;4L0frdiqWyGkJi+auMA}Cc3sq-Hi!7 zcDL(X6kRR~9leVK4|Mrh?FW9?+M%*iM{;4jcBiFbqWotrUZ(G-m~IZHL1vh4{-C<0 zoRXO#<*~mY8l+C>*#97@ptE0Z%?kOR)NkW+nkXc@HuahKUCb)T>EzWUgZWm*g6elD zzMl=Mc3|?gp{7S2MB7v)gXn0o)<(@&(o<0jcSbGR88x~yYU$3X-FHUqu`_DV4(hmI z(v?LS9vmF9CjwL&D?o*S?T^0nN1zWjyb2b^VcM%V{V_ZJF(>`8S|8%^hG`Z04t-n1 z%pi?p^!9>XVuCo*> z(G?6edXuLs*1(0IPIp!+n!#Ztr$e_d6+kd_+1PrzY+cJP{B*jRR5XLbNKS`tB^5w0 zblLiPx~~>p3-9UPlT_clR5ZaM@4vdLqNauDR9Q9^)Zj3Z)5*fzQ~<$bfsMJ(0$cC0 z3qQSRxl}ZR!$?kt?qDi_VCb@S_jFk}%P#zMy8n}EVuQm-PKRz!imqVj-q@zg&c5uz zd%BmpDvQ;RT#t01tF6RW@6$X8pFf>qW+bOGstYN)28WTHPQt^f0D?)F4X;m_ZD`qrpPulOsR9`s zMshlIODVd7q01)F(`Cz6cHyVf{cDP@!C@q)L$@nMS1@$hNO`(!L&`3^r~8GZ6O5#y z3FZkaBr$qev^^aP-Kn^Lq%vY~7|H2mWKN2rU@`(1>NE0oWyHcyFW|ydG=sxPPAB07 zsQ?CtksLj#sdd@(g!~lrL*+5jZ`)To8{XHzNWUH8KW=-6vB6;^rycz#ZU5N7NWY!v zc24cPo55iuXY5*E%~^NO=0f-nA0)}X-5Rj~PR%b8qMg3eD$u%ZS4M(J2p%)_+`yms za-|DngBN#C8^HgS3Sn><$!RC>y|#aBV5DDNhOxT+ZpT-kWQ^I&9?UzmXQg?H$+m`C z=;tDpMQrtAiLEx35R2UgZ=9c$hl}$};@qt`8!S$96t=&0Q4;UeDe}h`h`t120EqqsVE~AM1YrP( zxe3Am5Q7QA01!h7!T=D%3Bmvn^AdysAVv~|0U+il2m?SYNDu~qSePIT0I?`R7yx2% zf-nHYk_2G@h@}a_01&$+2m?Uuo*)bWu`EFt0Ae&j7yx2x6swvB*>P3FR=`JdgYa@df;9UI^{}@4HDqdW2_f>RpWq!Z!D$ z)K_%&Zlks>L(|Z92>O<$nWS_sUu6yiTg2-Bs}f8Z`JjNKYW`#`jD@pU}ZdMQ8ApAm61uF&U}lD@iXW=!op?>Kp`J*65GIyVB<4b180jarKYLSYhHL{5ldt z*Z+YQ9UWY}`MEhc z^=BHgr+R?H4X-FUVBV^l^u(fPK&`g8QXE`4QYn_A$Emx$=9DT$)6w*Cg8?2H!ni2< zwTRyI!N<5S1W)|~UU24DI0F#epUP!S9#6dI=@b9Dh+CNix%_+sNM>2R9Qx5& z`wj-Zd@^4g5bWD@u+FhK!OOf?{n*9@cMA4EH_qPddbrcPdfIF2LlW%Rt*8&Gjoo8l zeY4`z@T~PUA1B38_nKGyDDapg(_L)51&jBc(FEf8Tc;sj2x9YVwQEqwc@tME|C|h+hdaXQ8>x5e8%S zJn~!~KZx&qj2e=TIidrg)m@yZgDghq*Kvk7e8O}4sUP$?GT+HNB_+)#EBV&Iy@-G0 zcA3BO|6E{&N&c5HKd>n^yOjxUHn{O`5{QRPUPl5l-Lv@2HS35DuyKv(j>{-g+W*`& zapJ#T{@2TYC>ty3VzX=|5m622*uYW zYd+{AH`n~d0hg`$qWl+4%g&ib<%~5;9F;TI9H>G)nKLREu6f)=zSyjok3R~!xVYTO z!)a^wck#|$vqYtai26qdG#Se zo^Qx?^eKmgf6a^^XUG%V$khsYpdn9fBdsi~OwhcbjeMCxa%>0kvNm#+kbxm@Y$N~3 z(bYJH^a%N`HuB4SkMjZ$$ot#KIg0*(A%DY14x{5c6+qo?hJt)YeqB5H?MCDa zni)o5{1JutHPt;eb}Gcj6yhs8h3I796AHk-avF(FfKMp^dRo&0R8)i~m{;QuD1fHL zshQ{mc%K41=P3ewRsnWKK+)OeMOF3OKFD(qnla>#=Pd;MBxs46oWJj87w6 zS9PEep9;{O4~oWg+MdDP!L2{OeF5j~{`xJa24du4Sh?9`q4LJ?4erzJ@|=%=dvL_ev&-A-*^H`eMOu7xkB@V<8EhSe;ncFTIPoMdk}Y-E>{=kEz@1jKmIOW z1=p;HQWkF>_oq`U%I)J0$?SQt%hzXJRV*&8;xd3{q0kyX*0vMfESr~Hkz?_BW4j7( z`_rl6#p{}`$6b{B1FC!N)O_6!bxQxcr!IZcM2EX3+V}vyyql{yFQWxxR@HKCe&d4I z_zHCB)b_v!42t%6tZQ3s_I%sEC;bY%csEx+&&r%|Yp31Bf5Eb_S66jd4~p*xa#hDZ zbw!?Mx|UbZcL8jZ;QNW&ds@7~_zS8K7iP#llAIFsXW~iB| zb1qu32U|Sj+G{sHWw*`uW4~QfLG(WqoOd*`(bpi$O%)WU;AiLaO5kjeUk6#qo!V5I z<)X8>x^;V*`;$d?kq7?1L&t)RCB?ttsk4x@=km;DcewIP2C)Z){4nL;e57{feVONx_98A4+y$C!3DXNVqqeuC2CwKZza@V zaGVIzfa8M6V?fmN5j?yOp7dq1R0GJ(i-haD9PUOJ-? zHg23;C7U^h`unKHpT%&$@u5URFmss27Nx297qs!wztScw7QBLYN7!Dv7f{nwCvbr)PwH@hY-m`F;S(b@&s;T6w8=k4804vW`DBSfvQs$@qE!EBM6 zX|~AOY_WK)n=On<&LLjn@|mU>8BJvx!;~tDnjH=kwNlqP7^-J$s2)z0MZcyBSvqcK z=-Arp%8*(*f`|uUIMh&C?IId8;Qh3|*~2w^TE3(v5NMtW<*1t&#Tu+YmjGkbb2SzY zeWr5c5I%a;hi5FleJZ+NXtC@y*dY;Ee3eapZfo#wa62Wt0L8mJz20aSo5alF{Qs8! zPr@+%hX0!hcm)4)$M53Dr?PlXHX4L#hvt;zU1M4ad_GGX5hMiBFmc8&PSIKNbm{mS z{tXqcH^^#;0d*ZNFN66d@A)yLF_NV@UEPUdJDtw5>$2%q*$U#j^uV)uWBfbDE33+U z*0a(48A{seXbvVcWJWnUy|KVXss}^#&O!tHuXqFd0ecHdz=DGb!PfTr7XnH<(@}> zRxAlkF|?w}i5QvWvjg)H5f`8tUr~*E|hhJDDZ-W zi@w3`YK*MfCy;usQRtHG98oAjz=a=n1aw7N(T8Q&O&4~>6V0VVe~SDJmTATLVPw6! zfAQLK7~QK5UJRqdxZ;9fKe~p4|E|Jw#R)JI*#B%?t*l+%mDE(<|G(~#kDs^Z=v3afrElgJ@vn~&{)auxcjJe%413;XRAPfL;VuCOL#7POl01!-Ej)nmsPDv03fOv6&FaX4c z1YrP(Qxk*%AWlmV27ov{K^OqyB?-a+5N9L^13;XaAPfL;R)R19#MueL01yb>Tv-eN zac+Vz00h&l3t<3=^Am&tATCG{27tIQK^Oqyq6A^UP5w-F@m0|hMmC4C2RY|pIfKz6 z9J>#&ie7M^c%~PCDF^Y9v}aefw-B!bVCxzk4&HA-e=}_Z>c(?VW@L|Kzmm=T2jk__ zn$v=KAu;Q7LSuI{{KV}r`NT>a@5MNwEo*E-$me~Lp+5%l03*tlM+ZDJa|M`44lnW63oZWE*=Y=pUh!3@h--nF0 zgPHRH9W2==h%wz{6DXFT|XFVENatYbW3nt>Xub z4m1n#i3uia99(S-J3_-j0Yk1jWG%X*)uRYxMui;K9jX2#8{3g;Pk_l)J5oJ{V7wim z3N@siNgi!TI{9?CEDA2kQveCG1zC7xldo)Dh~*i~IkMV$`RosXXhw%(O*zJ$+soDYYBYd8Z; zfO{scb?x{pAYz`4Q~wO--m`WL9+5itR>zu_Ko6~uPGGeqAQX43Tms?KPrz#P98%Yn zL72pI1?KYczCH=2=yJTDB_R~A;kkU%WMzV%r+j~vd}ntIa=JP{F;b(7ul1q$Z%yE$ z><=!CRr}6Ikn=eJ$mEofxS?le4%wXC`Fca;O!mAN!MgQVt+HfPbG z3B_S>K4$Jl?{4z$rQUt1T-_owfC!f*2m^G!e}od`FVS7{vrKqblVj3yODP1+3j`_= z4=SCYd7-dMDhMLYST-fKEN|i&^O4diHXsHRy=COZcGE1f9I$iUkc8a0RJ`Q2& zx^d8q+o}6T&>tmM_zewqEKdk{FHQD9VmopNrgr>y|mq|JRQ|eiaQT%r*x4JBJYw3cWf;x}r zd?P28sZB0J!KRRtZ=0O0*9o~!P)zL*%E%>EeZSSI=`3BCYJnwIZ{i#xLx<5tDPQRY zgt3^>trOF0{C@KjN4m40&iWlwx^rvj$e(+cinmiM>X1K-#X)a<#`N^06%fW^qj&a` z`h#O+clMLM1SY{}j3;%EFcuHKa~Y&Y5XL{nZ%Rk|xsfv#Qa#!8t|#~wm7+?jwY~=EBy}_ zpyQY7wc_B+Tx3cyZ*ZT>d_vOU@ChlPafm~!2AH(=8=vpP=AeA4_LH;n!LAK4OxAk%B2RlAeXWXA4O%$o% z55-E?(P-3Os6Gqnw@qi#GxAw6kF_pfZD~qzad4l0>QM1hb?6DCrfc_}#gv*=oZ8-= zlxmoVX!2IW(t1smh#Jnf74cIw?D_6%G9z~-ys<0OmnhS=kBYD09HpGwY9O1^a&3TB zMRm)|1b-)aGtEAhi~d8)>t)IE`ci-$`Af8xT}q_UE%J%}lQ8j1l}%UCwPQT3e0&+$ zE{|R5?we!_odnnsDMSb1Tk2o4&R}Rd?AT$sT5r+;csWw{Sk4M$WUL%Eekv)DH-~dA z>y6fQbGa%iH=ac|(7jRn_#Sb%eABuA5Ny6&#iR)qJlMsV(w}{-m<~nID-3i2l+p>2AS5v{^;g3FnjY7sdcMr~ek>)}Zk`PE}pa zZ$i`?VCJv!D2>tl6#eUp=&uTO;^H06S1G-qb&Z^`^=ceiBl=rAv8mO1t%9jquLIbT z-^#DAR{6Ms{*Oo>0O{)$IB4B~W9P&Y@_(6r9&Fu{m8H%`XUE*H0u{y_W|KZ@ho(O6 z7N)#SzcwzmeKR?ua3)$7ro7m_rp*b-T8pK#X&a?S!FsH*_!cj5cOGU~W}C9&tPq)e z@_2-@R}|wP>+AwWZI>mE?ky)gp594N2YgPJJKu#*7YHwjcVz)Xr1*Rb)gGM;&M1k+ z{k!T(XQ&IA(@@~51om{#rc>ECF?*;0&DT(OTTcVwc<{iUs`)Bmk&AKWTW-CXj>5wn ztvk&PTX&e7ZDHjJe6ICYbLX~hH}^^xJla9heHr`G8DW_tas)3os85j>$sE8a)*H;twq9@U+}17TUg?5G|8Vs672TxfXVl-M(O(|MxPZx)TKW#6 zZA$Z~G>S`6-`*LSbx8I2*U9&+bQGh)l>Tq70LuRW`A69TJ!~$11XQQ)4g5&{gBmu? zn+0mvyfKNB&74CV{ROeC0`Nw;yHwR3G>%lyITYj-LHul-M~(Y8Jl z0#2{nA~au10;7Rh3P3Y}&M-<&|CS{GCYL<&mmnkk3z&n-w96{WAyf5;^7Le(JH4_L z{d&@!8Cc@h6UHuARrArCJzeR7j6?S&q8mmpB7GJEr<=8;anS4hh;XQmW{sOA@*7oo z^wBW0A2c|5W!)8zF=%his0H)!&9pDGzn%}mZZ>A2tfk{yK(G91+rG4DFhU)T1`~n5 z-?j;*?pd|j;oWkP>%>ne;<>_Qtm{I zp5PLciiit+7?xJ%!VIWzVT2B*#%P#{Nbk#(pE~?GMC)CyW0|@`XzxFv`v4b$e5s0z zRDCRdOsVrQMixsIzW`ot*vEyX46`yi<@tu%CH@;x#5TT8V?|M|Coc-(Un#Hs}_2T%Kf|*Ko$hC2MBs9MX&18PK*T!YgdcV103tQ~W3)$8O%+0m14a@i37LQNi zUg?5IC}L`U&{t}H_>iU2nI9f<>D)@DTRh-E{Gf$7R@|_K!ByOBi>EDc=e95{jeDgF z7GaP>^z{|JL1kusxJC0rQv3SwweQ+n_5Ur>3pa6G#CWEz^YO>X5XXfMh(69&yZ#|~ zvj|dmEd$E)+B1)c`eZ_%)8+xJfV)}S zZ3HG9BMpvO&7x<41zz2EKmv z)c|-pU!Oz1{zt}f)>dBM&DX797WnKs=;V4@?Dd&he0xl8jg84~%2=?bzAayS>Ra-4 zroJQJ?NSw-_ztpFPW>2} zlbD~1*e^H}J({Z)jlHMkrHeS?h5lPivN!AF$KvZ_y$6c7H12VN&aqcnlh*)F7*>6W zH42T$&0IQ7VWQ5guMCTng9j%k+4x0uYca1GyN1k;>)5>j`ws}apcz2Uu}V`cl{(pL zkqWOt7A4^4W{%G%G9!r;vZ3vo|3S%5Om*dd-_G+NXa(Oxi+L#`4x;P)PQCUIQJ!tl zia`@#M}z4gdoZOZe{l;Sce6&IN`Q!%!NqR;1Wy3dyuC~irLfP#0-V_mkC_h`e$<^V>lG!X2SZ3nJF3OBJ^+|7yGogU5(JDvj~faBFdQXy zaDlTKt17HQ@GK){qmz(n9bfY#uB09J=%|PsgyBKfLhw7J#{HU)p<3|v-{Qmj7oFf~2BhSZs&PM(Q7%NE!;x7@5xa~f zyY)c;6#S62Pm;cH6I0Q#TOVTRLkKNlesL%dC4L%fM{$X1!eqM%2Eb7h@v(M6 z;bBja;4*G;6j#Fsl-p?Ev!9ZjA{=-~Ca{+Ne~pI_1D@mm78TSWLYiJLmQ1Hx=t6er z?jkAdctwx)vvhofxv1lh1eSn0Qc5QV+te^T9d)y;AqTkI9FhZYN1n6}c=#FVL0b@x zc5>Woby&5oi?l9$NO}e7OJgRoEv|lbgQMg9SDZbKBy-kq>%(mbbkDhvSiB!+ zDO74(0LCa@h{!e%XRxeOVEcy}HO^VREZe-j9aV%#Aq-eCGg~o}vr~?HQt%O!#dVZH z%HwgQ061;uS&4;j4BM&qBcDUOi>d>2K@ozcuIS2mkEjAD4hBB~?f%qm-uHepN$O#W z;jx9y`x(SpOz&dUD=pPrOPYc^uMNQDQ#J@wCQRILI74t(;!>D+)G9_fiQ{DAEa3QI z!tKbKs&<$@q-$q_g+ekVPhP}=fG;mSNTo58Lc6&R31i}j+^-o^MR29^92tq^bC)5Wd@v*)z4;Iikxbl;=Hybff}TFAlXc8rVbW?D&z0i^DL! zKNBB-!AOl=m>lNxOrLkM;Ss~3y-F+-Wv6a63VAkP7Ki5!Z3 zv~>{gYu51AP`2uu2htZbhuEPy^x0F`Tn8DDNDWI}$37`P)zj zmga*W!Z?$ATCCt72%7jh^61;E$zUxgfluZ5ppI(mqhN&8E$mFk!)VcFiP}a~Q4H!} zBn;SzYDf7Lw&6s72hCKWqN1uYtLD1R;dBEQjn}>aw3M%tPiZyyn5vLgw4pEbWI>84~Ic~#;57(r89Bqyso!0X_Zs}3z;FCD!c!K4hQ!{li* z7HY4AIVV&j)HH^rh5+K(NpA)KAr#D57MIuB!V66cQ=S!23|jI+%ZqNqnYa@b@;aJY zE|2puPVf)ZUELR_WtQQ2HJQF~I!2V#G_p{Qyv-(X`R?LMs94d&juZLgVH z*t`s6(7YOdbXA4*{PR$MVo74Jm&!H)-0KsKkB9E9iM^f;-T9u^UEag3gv2p+b34h& zY-N4|Sgt_-#4owRh8y6xVhv5+Cec^a$$pYaZqOw4>;@bF$Xo$wW2B-%xT2AagsWH$ zKH7v!nf{%iL<|Rv2P-iL-^a*vCs+ZM<@{n`aQlg39o{4%AY6c}OLSqCL;Mu0_za>p z5Jj-~qRIR;+5MEgM`QW7>fF`Gu79fPwLxIK5UtN z6d0UhQ==`jC@8jN77L7RnXMxJv1Jy;c5RtS-*CP3B&S}c7W8LuN_%mcE3%7R-Sq9?c#<>DF<$dBENkH)SSAND#5m>Fo>9C2Y`!&C8| z{FOUKC_xK+8Z*lZZbpLI!e(KM;r|*jeO&{%$j7lkocMLT-P~JPi!!p~A4ZfXR~qGL zsLMNz!0m_0?e9kdpF&P=x?T(;k>((z@lQo~^_9j~J1s3I^Of)MT11_rHRgi?T*wl<$_4cRofmdGyvA)+;+ z8H1K`0ZO6x)H;w3Ou#SzAwBsyj1_Kk4GU&5Ksl~YLH#)8iM2S7^h!b+WJ@o5u24nA z8Ez~G&)Qp~m1ju|9*`m6So-`Ete|G4^aU7Ar@ZRh1zd~gzYwW5{1lu;>>GXp$9DG? zT4dn3CM+@-=eY^-bG#1mixA?PeLvcUr~; zA2Ad>Lm7^LJPX+X%g~RuCnm+4o|^VAWjxAfJym>v1005^g#ekt!i4mM@fxs0xI84? z!pmMp{}lWa=%C!+LVo^>UC20nn|u)g!D6m!o4myBlosQ-(wKQWMHXl?@1YQm6A4GS zNBqw_*X!uenCk)Omu(WbC3F*|qdk(U|^n)9zSfbVFJoNFKH%V>|BR&csUF5J`1 zpz%F&hAZ`9kNhE>C_(k75TrFq=;#izmw0C$l4K__(Q(OR`4A73S5E6)@QW~1IV(;K zI#7a-vq&?(g3r;z_7>6ZPI}PC2eu=D>h0|Wq|WX%NvCjJv4UNH(iWaO9d6-(ZD##i zUer(Kh!6Q+3?xWGf8|7A@XUP=sn=vsg2jNryrHFg)J^oK9oKC6~)%AxNv+P2w=#Vf;g^Bt_3E207@;LgZH|Aw#8Z$6_o7tvPD;%j9a z{6|n57TRydkkW;=ZM8m29(xz_P}V&Y@c#kuhxQBK2U@tF`2+ddQxC}3nR-yZ$*CX8 z7ngTDq>kj&kHj&1YO8!N(E@yEHz+yMr#qaehq`<6#sASg^36c76X2XdDCFW4ItAP* z01d+qIxnFU`K-iA$oIz>oPUzqtf@cC*PePtzRuLM@=Z?tMZSRZui}_J^+)+$qWOGi zP6!@-3LbfGxbC-vlVgmeAXLAWyn?`pIIiOL>jf-{oH}ai5^^|-s(PVzVfNE&IE1S3r^>n;1Iip7v*%T z%uIIVZN~s6{_Bd3?XWzGB1C6J=32#_6h|TeTU0^)Z=^N#DyOt6(A zsTvJF0qZ0^)V!(aXBekt~@cBI9S2OHd}`jExleVH`5>6S+#(=7z*0}m1wZR zJ4vIonPK19qN6p6EJI5*CdW*J#+Bm?? z@)n0UQLxn{J;VvNQPq$Qo4e0&oNX|v)U<@S4UJ7i(4MQP z1)~py-8-{j6t^?EiU7=LN(i*U;6+EQ5H>Y#XX!#t1qds+7ttzs3J=qD?=#Yu6k*Vp z^BrR<>@9XgeVxVWUuN?Hku_0fV=L1N?X!x;RxBFT?3Q!dHwgi5@Lt8LzD3XRmVX1F zwkEfb?495~2AaNDg)il2Xf8j2G?*BU`FN<$MA#=0mf7%O5*H4@B42&B1I-rf!mdLM zUe^TOeg-aF?C*aE(OQR0k^XmC&3kBXMbTV0?=+r=d!kuqf) z2s8xG-38xchBYQdza^lxwjywf1y)9NsVd72zyxY!3mk!#RQ-KsCk=87M8@Sz;0+t_ zu)tw`V%+rrbHeVzjEOx$yjlJa5TiTMiY|i^VDCZZf%OSN6P(!o4-vH3l)*I>j7hln zCV0l_zpk>f(mq_@MAYMY9w~{3U|1r0ggsdupurux1NH?t0m1HIQy*gG*Y6ztKVq8J zkMVc?MOtWGrAzgIRs`Qi#|bF-2{UyD{nP{z{Bmcx-Av^bfy*gIGp+{XBNy`^JF^^=q>Kd%SABL+pl%oa|+Iq4$=xsY2 z!WE@pktd(YjO5#5UwSrrDg)5xKZBZB`m49c*7SGs+Sbh|L6Yk)oEYftSdUuSAB`OcnNAm2+gnU76l ziqiD)S~hdG;pZ$|=vS%{S()ux4<6Y3I;I^A63B8`tbrd$yDVw9#5X>%^Z0AK<4@ag zBk)?!v|f)9vXO2HAfki+3S%CVvU6g6g zu>_kz$I}W8%PbrF0gl~pJ!FA2Wzu*ja;~>z#U(mcnd$ozYMZ6H1ImB@W}h~Hvj~(S zTZ+>&$Z*8PI@^o)L*f>Qa6zXf!9HwOs%0VY;!f9&I=>vR^Qm3b*_)o&6LrFfB-dZs3^)`d+8UbLVl*?+1V z2&_yqE$C8I&VD=Kz~(N_)n#~j8 zPH=SQ4E^%CIF9!FWSeR1v|sw#{c;MojN?^4u3aMay%qKKM7UTv4HxX7HZGdGs66bT zg6SZf>Bi1YriJ~H5Cp}8))NOxx=7LqTsN|d3|#j1*#`hFJU2^BB*DlB6 z1-k$xB#-PEi#WYa_PBdv|KtC4eZT4Egui9L?$-Cq|GGY+x}$x++eLls+V-5Y ztFE1n&uR6s4|ltLd)&BlQkq`h@4MT#{lDqISNzxY{h_E)sPMn^_^HDgV=I;&74HHC+T3 zE>#Za{j+xt*RF_vI$XkMuu0VkmsS&pi({fC=_0t&5nQWx4%e=Tb~;=n+SVVt;nHg2 zaFLcZT?AJqg6p)M!?i2oo(>m@yM;~MPJC%KakxnHnoi+53v`diads?6?n+F-xE48b zR!V1nBc^mPE>7)WB;kCXi|}yj&hfA-0c|=SD4?~VaPP!}RujhqRm9O5UyxGUk$j zga=I9JHx|6yNQQLet3q>!{%uSf$|%zCXR+bx6?&*gSY5Hegm@I8C-==?|d=}`zM0y zWYP^bCpzKMYT|G`OSmLmG=93*ejRI!U5S2S|6u&YMZb;?qKs$856A0H>)RD+POnc$ zv!g!JpsDW))YmU~r(IZV&G3b|9C`dM@J*vK#iAVk#1o^Q=l_MZXlU3UX1wsWZ&@i^ z9d(EX!1Pqtox7ALcSV{Z9wK>?q}hQ6(qK3)c3I!9NN#$4B)N|INLyij*8%VOnecvF zT*!OJF7PfZuNsU2sAY&S$g79KszcPzGD{Ee@4rTfknVyu049CS9ajce$=hFt?*L(r zk;yG_a39(gxI7sw#L+qwkJwkuw4hCv_0}G%I9H>fMAiC$s z7QeZbG(zzoKwXtRU30U!Z!Iki4;--$=8Z)}}xruyTb?c+%&M96lg*NIfQ`lCB z-K};CqORj^1@qIc)3XzaA<&|KJl3`=_|Ok;iF^yFDdW|qRFyq{>?jl_*IAv4{JDqu z2Kqtn2YY1YRnGaaOwZ4>)me7pxjantC48yY z{62p7;P-3%9>x!9v&3KU#m-Lx=7@qq<2BHrikGujCCr(26{d8051$Tk&KWcc9?tiFzgl-N$q#33g zu+u%8?%!ydA-YNW2p^#P84aI9H%9@&2kFKhBI_;D%@GE7p6)+s_yW4m)bK@gKda&M z=;q)<`YheR4a-?bH^&m(i|K}Xg5mS&=J%woiHjga?3ulT!0^f7{r z0*T6WFVgTF-DE8YpG)^b4ezC!Tn6E3y7$y@k`#jWVGu_k+&!)Ih^N{DO@#*PyW zTpi&VXX5=J4M-_N-sIC3_Cp7(0eiq1NDg41HTWpTw8JY2@EuIW?~%)^?FC@qu6JXV zj%ym;pN^V!E^-owg6@Vne>5NIH4MX?0ho(jXGEQ(0 z&|Si{7t%pXz-#4>f&e52LRf~s{<%yn=Lmj?U2A_Gy&zQ_NUQRM0gxEpl`xkuN`!1f zPyPocLNrR-Q9KOH7%%oi=d)NT%a%Rud8A+7o|kJq2oM*Qf*;@mgKJ!w&7_fT< zbIwIwJAp}39;kqXVC=x2{qK<9TK}LBhdv1cRsov^zC?_Gf?Ne8F~3B6iMyoiBbC`s z>>)4xY-FzZS;%Jfxt2YF8D*qy+tp0zZS%n!78UI+Q;fu6D1Ia!<7n6#GVvO|Wl_zI#MCIHwB+<0TGiN8-Ir1B2X<VBiCdnY)7H7aw26j1EI$x&f>#Vi1t z3$y^B5j!ntnE|40JAsJwfL12<1TLI-owZ&JS%@@M1>M%jSUc>*Hss^Kxo@K-!=kO1 zJ21`q1$ucSEfJ=NQb#q*AC^nF${f2 zJCrN9u!J|YL%CrUrhRKWl)KSk+N;{3)O%F+fNkVc9MhvXzEy+;IZebl^zT4R@twSj zscnr1K!j&?B8J4wf(giu}_u)C+-AF!HzK+ zzlL0HgU0v&$C`12A8YjABpz{FldMUO=&EyyDZ+$rK|&t=lCjT86oM)5j+8u}<^L}W zg7FUdG~aBo8+~}9nC4u;Kk;X5uDKB{ObYJDNdL_OfICB7hk!r@f}+0!ND1wm$#?c5 zFA$j>w;`>TI~BTRfa)IQ-qv;w;c}n(&eAVesVx}GdX?r|Y(61C*f>^6 zcfGcgG%f9v8$ZBAVO=PqkivprOMf|q$LjhzF`GW0VhE%+~^*`i8^YGTPpKu{8 zuthK)?Z}MO(jCfMpqoi7?rbMz9j-Nc@tchwk8nUzl_M>Xq2-D#sz)H^C2qp+>-a(L zm-WORDDD9KF2rw~iwGF55r~R4WWICkbs$Ddt~d3ua75H_%xK*Njo7jxQoWp}nm0XY z{`8=7dWNvf3}M+B!gABXVga~jXdx!P+8pmXesd{{S5~^bV_v2AtX1y!4E%Fr8BI_* zKSNmBiU(efUewgF&|a&YPESx(L**I7*0j%bRXna0+=^ix7QdsSrjg%7^bxoA#uBaKJo&0x)>b#Y6bAB7PzM{FooS*mFOU+09Q8 zyXJ-tCcyCf5fgw3GXV^H;d+p+qb;9jbS*h{?7tU%TDjSpWMXu(J;lt`oCeszAF)<2 zMd2fmpueo>Y`i9v7$AzJ2<@gV)$ z!5;uY?ZqL84&rDR#BjcDklb{*O*7R-wN zs=26)E2lL9?5h30Nw6p^LZ}%0cMYb#A`E8L|Ik8iMRO`h;|D~aKA#{F} z_BjpxS`^Ca_&yOjk4n^XCIW7|1dH}1go3I6qrp_Zgu(1ns4T)WRS6&i$BwxO^}oQu zX1T5ImiGw4uAs^%EQN(z8cc0b7|fR265OI*)U@U*ggOYdE&px+Bn-K~2d%i9t>}+h zk<_eTj|HEFymKTN^EZjJoR89bn*Li1j`ftQ!PJMwgNHSkI@B;2c;MQK3b?&F#|oFp z@F8R8^yKM%&gsjyAj;LFdTDdLJ}>^*h(dIkhUXqRNNY#vSMQ4o>3-&6ada5n9u^iz znFNpPbUZVR$X)6Sbadb)GEZbU;W=<`#dwtAgZF-9h8DKylPxOmcM|`EB;=z_$=bom zO||D+lNjSpZQrCi<)8yW6Z2=x#M=NVX=pjiaTBqPzgc&9~`BP-(WlSTh52w^Y z>EkH;{)pc?2ocmeLb;YW7{BY`F5~+cz7$>#1t3rgB*u@!A5%eiU)p9+oD*yy*fYj# zlo)fK8Hc@YqF-U;+vxf(Kt7+5hXJ6Hb^=`A(~*Mu!WvW1!P_$fOe`HKs5z7rboAP3 zC&00njuh0z)rL?89fJ<;j1={p6W|b48*m*$k7JW#dKFYD)&@}k9fL_bpLBwEcU3}l zq@4CXXR8=7q{Zu~C3OPaanXhb$#S}t zm(R76ogv9^#;Kib9c3*iz=;_=0zui`68cox{cp6E7uo$py$Bq$F{{Ihi9}qv9xD#2 z@m1cJ(`isKwQmB4Y7!iW_kiPE%00@{2A4Q#zfw0(?agg2c8f>J%QUaC~HrGNMK}o(tR}z1a znj-;QI1|KDt!C>8BX#$30+WAyq&}VYw;^z~k1HoLzRSEuXSTpjKxGBEWjX8c*cJq8 zJltW}7!HC8E4veA(Y+eKPlHSGw;pbW!PJL)y28fZfbaMx@F$d0Y-I`AeAe;5OFTF# zzzjGVk;~_7i8vR{At}^{9R2nyGH?uCk+Q%vkETq6y#u}GEg*VBbPx^9FJI(W^f>Z` zX5I0>M+i(gWJH5~132_AQ#-xBr)U*+mN%f!%Fmh^^!|MR|8Jmof<_Y<0~VdQEDn2h z=x>FTya?D7sOioP^rZZ>LcWlMu-umAU9Yj&A5??=!GVDRIbJZBuZGAYYZ}ZC*!jGl zkpjfPZ*b7$%$S^o>cBw3)W|HnXCpH(m@oKQ=5oY@M3#2h=AG2Mei^gYdc6f6cQd{b zix?#02!v{Odz3(|CkB&hMKOruZh6A*6G&ct^s=7GJBPI%iX-B`Afpi|NVB+S@NMtEz{05wYSM|#w9_5rA<28(d zK{<~jsOK=t#D-iJ_rt!1%QXyrsDpKwQI@3c&v*F;y8Ku(w$q!@JYq)kpc&0*1Xt}2Z zNo3G5?GX=pysJTHj{gt%C;R6p_RoIfuM%&(K?jbXAYq3$7PEf_#}9`W=i&3olVp#U z&7p5~hwtPL-zlNb7Ll-izCFPOS^aE#f^uK|6nlaj)Ag6y6I=_`UuaKo*-}5$p5Usc zzS7ZrV~*ylI+|}!NAm$Ok`Jsy@&Pf-w;Uq!4E-#;7grv%Iq#rH#Eg(|GgfUW3HN2y zGl`W|#7e#TG7#$097%SNBs*R`jP$xE@zGx$2jj?lC&|{gAOpVD9ln!0e5bU1yoL+= zOD#E8Z#WO6GA2$P+)&>BNah;F(zwC; zQiEmRV0S?{=b7HXoF!Pqluqo`thpHc*i$nunU^F?h!3fS7?E1U25TNtFJx-FoP%@E z$hkjvR_t;gLZRnmf;61u$Z*brll&IWemKRb%P!|(>0r ztb{)s&Wt;Pw>0KAl5V+oEM)>K^QnLm2@_umoG5_&@d%WI2?MHk28Q?RdkAu)ac{>-q> z2&iV6X;l~eMMQa3x7YzSH{p_wZz=wXUDc1b6zRZ{F8Etl0$I@wAORh+PztDQiI+i1 ztHvaB$T}(bXIBy-wi1%anvRPbnF{n_(hybc0X(e+p-4hW2bPrqwH|R0NWuaF9fN5* zpAM+di6Qs1RB@u*40hXz9#H z!6$HH!Lo`AsCo$#?r;$olsZ$*yoL*gVyQ&P38<0T*$R&15JNZ7XpbLWqHWfXa(!_| zX&5J<{SrouduHVuxB{W7p|;TX7%rb8oh$jFB$*^0wTPF6Ckvw%9| z>m4i#U4I)no?N5M(WZ)by7U_5wOV|5XM!1tn=#Dg4Et%cH2Wn>kXtOorTk$Obzv+S z{?M6!;`!(=texb_DNH;W)2Sjq?ZC3Y>W78i5O87m&&yCgn#6liDQi)4guVAA`s653 zNz}|A>r+QcF_uza)m49{nzl_!zTC)0dxF8rGg4|-AqMU3LexJE{Q_T)80RdD+7Izk zQ%(SIwjFm1y`C+X>kw(eM)f>R*7&8l8oxA2<9EP(X>vwCP0aXRWWHJRrO6oPK{XMh zV-Eyez?3ur*eth!%L57I*{;+%H*6+Rk>Tf8oF~IvHQ{ABZ+jjFgE?Nno!hF)B3iC&XmX zuf*9TbI5au)+EF6f{2ExH+VP5q`cSIA+dy|t~7Whim9?*xzR{^isrIV)k zQ4eg0{48p8i+&$I^}{qc7s8<_+t4i8t2yvFDxnyXk_vipxzmlPNY*%Na|Cjiww;gZ zatv)N;>OKluGl;NJxr$4+QCcx%lqs*4}TY|ybf96@Ebk@SH2zIaa<$8utpepN+S#J zsf~&8nv_Qvon^2DAW)`V&g$S{@F6}8(p&?G^&&pIAd{%;&q7;+Vf05aV_SI0#P5#+ zWj_Q8A*XcBXw|QM=gzljbj-6zkq4Fz8|X z!YCzy##ny|UD(mDoj!@`w~EK&=|tsg$>9K@`LW6Y#QKuA?MZ(^w{N7 z8cum1C=O4}SWWBmAe8yY6jFbLa7FjtV|e(?@#jhLvF^~=gEV$fVqHHkwX^O+u~2_r zG{$L-@jQs}1q=z=ebGITG+$T0h$`4m|FfoQK{PHS?ZgW;&r)!bZmL?#7M zZ5~{y)^nT-(#2&j%cqLVaPKLRGeeGSx-^!B0w^oMRnr5makg9_WDyJn{)2)R;j*M2 z@wxz@iVd#=T{2mc^YKuT@Z8+O_5-h6LIqf>Ra1(j(A``X%;Uga5mseE6A z0%?6G)r90h4j?B$*n{J%z!d;VW$f6l)VriByMeKWz8LVj$C@;j?OUh8+^bUi!ZhDC#EPT@5gEQb%*EC*XprNl4Q5c>u4z!xlhV zB^{ER%-F)Ns=B$!L4SYlKmQQ~DxvXxx`$v4ao9 z$Nsc&?Kk!j;HOngQM_yF>nheSfwsFD^ls3@?pNs4J-78djv%+SA3tax_c~sSFaJ#g z8e&7i7FlG`2J9X?G7TO#6Ixe|r8VJk)uc`RN>}6TV+{^PbO0y5zs*ndt|i)%k>@tu zFN88ftlMZJ)`>lZ-I6=I_hTO^;UQfCEvpS0ztkgq8cZHtFvQ5AX_1~D41&ar`1Rz& zZ@>uMALSNs!`nDdm_VvVT&{pCP`g?EK2V`f3%sN;dwSsFvE-aVr#cIQGz!BUCx!Or zom9G2X9)J8rqRtPnG^8zZR&Pohv^`4DDp zFf}`^TGmQxo(4O98GXd<@V{WKc3frVx|O=Mev#e}x)^VeR8Mou>-gH+uW^Z{bYtyB zc1eyWv2EowjKeW?6SveZMsXL74OmUw9cJPR7>CTVM6ffg*pabG`hFqs2`zeF(9^|r z#&M15bY_6n!7EnXi^hlCFb4YppJ8|yVb%;?9mV|n&hyH9@0;_=do*4QSL4X)(O!8; z<6uNJ4yYdJmDe!xti}*rjfK^^SH7q*+bcI4!(Mq^!>!JppQ|n@r*qXx88^u;D(7<5 z1?65msqE#drDhX^Ii1boX}g)aektnjUgx;MX7q9w@4`_&%|C6v`3WiY22`r^jnL`S zK*R-<9VK-)Vg*gzBbVgEb@vp{whluI6i8EZ0FRL8r~9qh^cD{35hl^-(hQ<0!$B_|kLuXJsN!V?<*je?C8W z0h!Cx8RmrASQpRJs$9ski=eo{TV7IPbq7)eZ*1tCc)>EeIrjb}2rh`Up}3K{E5#@t zJch}tyB@}rqC((%5DN&foM$}!Wp0m`qYkS)M1JH2ck@_v{OzOKGv2ct%fryJQVCe*F&x$p12a3SK z!2`XSig;!xMR;1QTu+K)W(`yC;^r~8cGPRh=0$WcSFu@u5X3QZINHL0c5T=^raoYc zNq)aoZKyeIzva{h9IMfXS2}23C#Mb?k2^IeLHNX|BS#aEis~;kCqs=Ezfj3hbik=L z8*iig>@%pZVEU*!K5@Vz$X|>YtF;JS<5!r7XVBgQn4V7@i}aDf-jD}7oyMx_B{&d@ zM8RU|yv*PK#r+rk~@E>`r>3m)3+ z!6uu9-J3mDDZN;US0wh>pl(`nN}HT17<4*Tatd1+*t{a`EJ3>tM7xp`q*u^RHl$p4 zOC>phtzBMrk@0{rrE-5Rv=vJ0pGV$<+BlgrRsdeDNmk)E&~|?wQ+9^Qk-dy7uTj?4 zN*rO4^f2zvV?nv7?k)EG`N*4dgEP==y(!5BS#ubxXof(vOy`qHe<^CIB};?uwmM># zBc}fFwjB1%XqP_%@6WZS`YrK8uEk2;tth@;mDv03i5!{%+$~G2yH3vpQl@waVXM%# z&>m{}7ZKoyZawQQ|0Ht=CCJHCme7YEHkuM^@jD*B)9_n?A2$al%@3*ydBl-OufERp zlKwKbAb@D&`J;56BhE28SGPm!$FxK1hte55iRFKB+5VAxv>LgWlq2`j!4lN!A*i^} zd0$K*dcG!^coV=lnEfZ`V&-GnqYmD1uXb_ken*~DUJ_J5zL`ZO9Kn(0brzEyZ*zyO z1GbEy!#M*TmrwFJysa3KG}-b$z(umRp^BW)!Z`j1;qSG?Fi(p0QvUzJ+9d7QkOE^2 zZ}31=JB0Aq0e50*oa+Rlxglut8Uq?KZ)`6Gb}sgQB#oA=V7K>vW^NETGR^OEsd8@h z;VzJn#P7ZMosHjX@FQaQ9lr{H%By@_K<66JskPO8>0z_kHt3}DPO+exlY6k;RUN{y zX4)T$5mOj*Ct}jUW)Nj|+p6fHa)S_T!H&pfLs_gyC9@{2&Nd0Sy)8#gvLa)+!}5$> zI8VGM@uJ5f+I=~o=D+`s$kXhKLXw2(me~FPHWQu7RoIW%U-t*ra$~@rxC}vZ&K;-hxQJf9%SRt8UTt@cmXS#CoU?sB;K3zY$K9 zrUbbk{5TkJuYXz!s*hS$>232kB#T>xVr~aHZ3$rQixa^zREtvA7JoA;+sMi*fR*;| zSiU6=7npgTzMLIf==gYw)~%Q9=3ZY6CulVodl{?bnItA18p~k%IFwkZ9;iX(^w?nR zU39srDO1HO@~;XD(sa=);=UB=@SR$>Zad@?M?(Xd^=OD4N8SQ2!dq|+Qims<-7Uc< z9U#fuN}TDNOLwF7wVc~(0DD(3xMDZ|6@uWz+9Eh`5>0%M01jHuA!DX`qC%PVMj9{l z<~2O8+}9YcmSHxG{SI>z)pn!|{)0bN-wkjY3#Ky7Q@&)-HFGQVt@Qd9y9q(yVr}^| zc6UR$Q`^;)`hdL^n#GY={O{4h)%F-QE!LOY- z0AColVO$s*;}uCxums(cajyU+jzACnsxKp#RMzL%8X91#aMf8kVk^^0eRgmc5e~cK zuuhauS?mgYk0K7*s+< z+rf{B-ThF3U^hGdLFDoj!9PIaoZ>$f?9U|QVY=Sx%k*9Fbx=kCohb@$h#X8NgNp%Y zX{;A#T9)OLVwKi_>3AJeY_I}Js=d6_hpwojc-TVjDKhVWe`H(1y#I||P;`{5qM&w^ zc_a7bd?UBuX@7Pl!(p{hK73i?%v-`Y!0U;d9uE7~Nl^BEQCHt4Cx{`O9bV)_-Qtr= zwR@Qf(90{)0CWn6$uJhf@xDC(QSt5qtEOGO^5O=V>?RB#5jHfeo5^b4>MYxZVfcv{ z1RaI-jXkOFeo`m=VuAnpgvAm989$cFGGTurqT%)xr5kpg7aWMcc(G%|@?VZ}d%bk) zAcok|v#DSeJgMMd{OxLe?I6AUWM~YR!LUGSzvzzhFfJvK8m`I81dE1H_nL9g&6rS0Ulasu#M5o8sqob4YMFnIx6%Qp>WG>=tDp% zI1+{Sy6MR)QAa4RIa`8J03|J+x*8E_0m0qwo{0)tMNn!=*nOCM7fJ|d3JLeS;jX>fI5yQ@3DluMfIV@F3@;(h{i>O z?i3?%^aPy<^wlr0n;&V9-ARHHlZ8*wey9OCG&9B;oXyLC2eXFH!3VF)OcjMV*6_uKBH}hm1?PAP>&irJx@(NHN2! zb{bylS{W|AX_f!C6J%K>&PwyFmg^sdK~l<8+kxyFzL0 zmcn-TRLq~PqsgCMh(8-SCK37yhQ5fQFJ>r*uEK98U}l;)9`Hw_TnDwk26?9_!y48DI1#* zhpA8E`Y(Qd+1AlgFE(ET7*zNY>ePiyNEe>~USCSQ3L*tfvW8WT≧y7G(J60MTaD z6UB-mWfAdugAafJY{5<}%k*^qhfsFb7R;Z?GK?MII!j#VXE&c_ z9%Uv*t|>KKcc_u6_Cu*~A#>t;0l&&Z{WYkv2K5WO0Bh}4cZB$s{M~{Gd9jr^2=$&o zUQC%UQ{7XG%B4mcLn*B3c{dM%#QC=17>otnaE97&Rh3)+VH`x1rSD|DjAgw9DKpih zwXELsa3h-@X{=0_dmGQIJ}<`2vBs35I$CRL%(-AH$97iv>3Ee`UgIcKY&jTT?P71D zNZix@SR98~lQ6@_3;?XUgy}bHDEFUU?r*>uaWj|q87U9%k%c{vcV$5nvEc^gh8&7Odz{4EF%Q37 z#vFA^(L_9VXPT`J9h8~7`^V1nx+KvW$b@t#`rdj`J%TTJTTHJ74M|l}Mz2iGHm^+4 zOgM)o$-!?^9zLQVfq{wLeCeG#rEo1i&J^(I8J@Fr-P3CjHl~4msA5&gVm_=ONfg>u z+9&?;z`lZx+mqOZCj6!C@Ld*h0+Uj`;uI_WrSa~}Br6yIs*Y~!Y|DK`$G?QFAY`EV*0xdiX-G;;No`y}+ zhIUgQG@GD4(^uwlTFm>3Ov>!sS~`X2d4p#$(DBUei9k}OB%iDWrmm`D7YyA~E%6Tc zJhjErKgq=PC=-t@#AJgFxRocA`d`ipViJN;u!)$>se{71NDJ-hIcd8w0m8@vA4Gk@ z$1t)aqt5GI*SsznWvZv*+|2q>#^53LuFB#VUkN-^5b4>92DjkJmwhdqfgqW~{!M4y zX}HfxD^md**bBjM62PUkDN^T~Fz*dI?FfM@ibz%=!;@14nkz#-w z*`Sf3WO5rdjMN!GrGS(yD@vJ+QYNF6Sqd->Wa*H$8<(d=z6ck-rlUnq&UujvfiIKp zjo#fxDWZ4BQA8X)$2;#XFJo}|_`(gKpsmMZNJpwk>=TA!=4lWpr!a_HCjmdL)%dfK zR3Z3xXe*Pzn>I0;an@lG+Y@Q0(-sW<|Cd|<7rQ3?%jlYq3wRv7QOQ2EOzaY%!Hh zp0G+xoQ8S|Vi^8rC@#jYMo=U^^`%EvUWO1#Q0G)%9~&=NCWjK#r`pA)1f^zN^l55^ zzIte?Nj#c3Sk*vO2uZpJ^B9f&qgoWlRgC$`z+#xr*!J+KHOB z*rhaIbT^PF>oi^i`Bvh#$h{C!b!>oy!{b29e>>7lycSDk-j#emtXE<|HJoDNc|F&E zhxAsIn3pgYG!)X_d=4o}d*VPqISdfT3ad0lhuMH>c6jYtHeN?(B-+55Eyur#09@Od zvw0F*t4Fp9KJLCXaPB0T6H9i>j!TOrvyxgj=dD+Q3~rNo)ZQqxuWcqTYuu zZ;y<5V`1~4&}cVI%Z}+kOaL40`R{~`)VuAdZHu8hYxZ1ZkYSQsiV7T&Jg^KsQP9!6 zD@2$=-@S-Rlh<+o3f4S{w|ytEcqzQ6O`A02xdqG!lM6$tG>)SGA+(Mg?G#NwYagH& zrEv~=GrniCuXVk#SEszUVFAkWPs6aJao*|puFX^rFw);XD*aLFqx7d~-+{G=e@179 zxFBfx??>(Rez&-GNwzug^|pYhQlZ$(!O}T#7GaVdaIkYj5<6WpXsUT*h8M}v^lZ3? zj2-c+c7X6GknWiPu|94$zXk||SmQc4yP3VG-EFMAyGu+fl3sD`=;6|EV8OeQWB^zMa3 zdv6rk#*m?LKIfq_H1_F)Zi|V*eG>CYw_wtQcSa^{`}YWePVK=q9&JtXYX|27pcZ4I zpf%HjUO7GJRnvpcYX==~iiaWKS_XcJ6`a@(EClB>^bUp|6NUyCw6nLNyO2R&=uCD| zJ8VtZh#<_l2*$LWxyTgBZ?N9v6VGJab4lDYMbB{a#CsDLlY`v>4vPtRF-roglP`ee zH`rkEiRbn72<=-5T8W(lyjYWaBi)LP@R}?ekqS208yX0oVq|p<)E-j68xR#-ia)J4 z;*UheW3b?WT4kQAo9Wny?17GkC3ya~f$!jd5pRqef3_{}%0@O0{o{bZ2%7M7O$z|k zF5$SuKI`TE8l1V->IqrcuZIBOa|ypR(a4#ZMj01zHu|c2S?hj;a+ETxbw8$Ch}l~A z6S{?j@#YhWj=aE<|A#+{2SyqYCFaeDiSR%w z10I-Yck#fqZ9E*6*r%y@;M@d$k$9!R$sUKn>Rt44teIjftOl*&H+Z+^Q_p+ip7+K*SJPw08UUyRz;#$V_E6^a7we*nYcAS= zV~ZW<;Pyr!4*ELy1lJ&UZHXIP%P;2l;C*lezeSTkrX{x+OV;`u8~T34yS!-MM|LqL zjS8ZaK5DlH8; zIKuWnLeEF}=OBha#`<3o*RJafKUz~dt?L;+&ZK9>lO|&kxbs@D^D!h9ULJY165x`w zz6js7z^Og4oxEF46*41qsl?UCkzI80Rn``E&bF{~6h%1UhuGi~NQ*1D#Uocei!wU6 zfx!Sr(tNTFPTT8O;zd8wUGxZx{*)=2o>q0C1+iXmUS2sp&u4&d`uP<{P$D;GNXS6C_#@1;y^0y3 zfu6+s@P+vU&WUi;39D-*0U=I(JdOZZ5qh2yjWxm6V?OaxEg6{B1hI-|LtykH)NDQg!F;P#(qh=F+}=i5vNc!3e#tPJSf%o=60|BGNtWLg1>({X8TalxZDO84K$_+mVU|8#mh+S_!2nflX5DE_p$$Woy z+m~1r$ef-SjeMEGM`$n=beZ5Q(?V`%2zo`ziF&2&?W9-YKF$JVye>drUC8me4%a4UEV5ZG&3!G6f+AA&z^YGu;uq@h-N zOqM&?q&x8^TOIO(ufc)M9LA@l^MqQ}h^`K5^=g>qRN|02aJRTrgY$Zlsn}ct$x0ZX z8*wdR&6)t@ZDf>}B=%}4ee-=n9w-age%Z-b!PT^F1*2#|xa58o6yoD3ZD#pf*kIc~ zl5OPHNNuuc5GDwyy>fcfR+*-yqApZOMd`DL31&ZPiTx>|2V0dwRw;a5>Wgs{V4|19 z6)JO`n0V2aaJS=uof3g;iu$;g~`p4jJ9hzz?NulnA5`-btew@+~FB*K#O`|9uS6gCks)HDWFX;%e zCq(d-mzXK_R+>#vQxg~CT-^F1#N73iH|@mz$lpZ%LdMQk=XfF$l*ambE|9#K=K?7% zd%+)3#-eQfVR!ilk;M(}L#P{k8-H`v*9=(xci?h@@8WOp2l5}r^i~gr0)jDQb^)ob z`6<%0P|Ds2`W=IW%t?*40+TTepFgpb`;iw#d=H=c=Wzne-d@}U{iqHb)G85gK!g>K zAm4{l%u1Y?IQIHPAK-=ifW#Z`P&efy>d`jInwwD7M(r3V0v(Rdb;4W64uk{+TLBIB zjIk5I5mPU@&8N^PEy4djBIR8UEaBM_3D7-$AG(tk`%17ZZ}Q{;#tZP{DH@tFuEg)N z=GVgaVB@CtHw^zI+#ibhuYr5~Q}|;b{%sq>`R1x`wgI~donC1kh5#HL^IryXl8u2% z^GF0$nrrxXH%bUISDLS#Uet33PAmNqDg83}dyD+NOaA^8e-#nf9^YR4DY`7!3=s8B zC^2%U+;A@1g{xVCvo=*_sw;5pgH(kx5JEsJz7^8c0#AD_!a<)Wl;l5v^to*#$SE{) zJ7^{mrcDXT=x!o#laNL_2HI#R)mXqM5^a-&BIQS7b4}I(O;xsw-r2y z!0KQMxA#Y|N+2r3{)|Mw2=0M&@Ixf6=VIZ{%cm#af1TVR0zcZPA$YlVWdgBbu@Bai2 ztr)lP)MiVzd@mw?iU`SAohN}Ntw0n;pA3AWu%97m{RZ@Pc6;$1ZN@?V0Nt0BIJ4*E z+j@jQaIbqU(2RkY$5ti#7;Mn$!|o%o>c1T2ReMT=J`BUzWisUoBsRRVBj+B}s=t`Q z(K94-C96}EWIW=IO-w0y^ieg7to#ZUNYQw|6B%|`qC{#rCMWfVxQ{OJ8lg+BeIOD=}xPC1$ei1TYsDq6Clh{biT0}t&+yAfNcTTKh zi_1XpPO_*elQIc7(Rl5xuGz^faJ1q0(JTNX@hiaysv!1=gF-UaDS_fJj=~&)A+P2O z5Sd|R9-k<#?4Bt4oLZl40lOS!(oq<+NM2C; znK@GW(b9n=GL}=!M$_O=yQjfY#WQu}5|#ZzdC5)O2D*B!%){JK=uMXzgK4$d#@-tM z*FA+uriHmkA-9z>sca`W!Ce^AwU)E>(J)9&Pfu{RHabHNakf6*8M4&b`dDYkd?zYe z%YnH{^4o1N9>#Ex<$2c2ZKWI>2jWC$Yb^}Y%&340Ox^fsz?!3m3fkG)6?`MAU>hn} zR0tknJs(3yq8_hir|R?V=6T;iH--zX&7nl2__6$>!EkgSU?%afyU768KOKLo{c53t za2N!yMMxYIcN2dlFL;Dx!xjEIVrfzE3xH6G!!HSQv4j;*(o+U?<;(`i1&iEcQNfD) z;Oujn6wE}_sMp}5K&ZYk_$aQaZv}i5H;5XegQZ(HVmA4@W$P%7^9nJL%6ONVF*q7 zXEWI3P70PW_YdOz?`5Fp*MXid4UtLIe)FWz z_fq)2b#~}G9KLfip>Kcq-q!Z*Q^hk}T4_HTEKFV2Co&@w2QVHwLo3&0u*8Zb!)r@~ zF^@o;Ob{qdYiq_{3dlo(s2o5}+2c^)Z#{Vqq?SGxI603vNg5*P^F*-#+51tDXBGlL zkN+54+^K#XU;mf*(;Iq-M#_rX6a7va5lTI4AfOLfYoLVTx@?F_@$X z`)jyR%ace|rvQL8#XH*qpArVOX7g4bo@JMI{Z5CUOX>OMOLv&2x>Si=6miG7I4sgh z?lPZ40DOud{~CWV1VjcBx^rbDBSfa?zU1`OMiyO^Xk8uhTPJZA0GI@Rbwa=%Iqv&9 z`MV$jto$(Ei-E*APCJ_ukklv^D#2#JiX(H}pw6Wx z_5#1E6;jvn%Y*xDiGMZLHztV&;PU*8|1`1K&bWvf`%>5O+ne@((-HYMM)s$!<5!62 zw^6i~XtBiKb%*jMc>niNC;;5k6vZz!vHl;TXf5hD$V4(2z|)(||8ba;_e9sW+d_Iy%DY!+Ds&W- zyEnXFPGgl8Z+IUZ+ub!hko622yl5k1f_$*Y^AF)P0I@9>p@qL0H{@y zLAm?^w2bmfAvgXGIA;J2^dn0y72D>+$HkTU%J6X+rM?B#dYqOr)q~?+v?T7$;jmEi zoq{$p_&7FVI5P|hjEU=pa__2BcyN~IoBXY)R?as$JnHjfjNRU3+6a*l-;}tGeECzv z;)(;HRfSB9<7DDlw0EP7Gd91_JC1`2Ga&%knq1{+BWv(+J*U1pd|bJyuK^#|XzE*1 zJs{rTO!e5fH`|FFT#pft?frj;odZMcZ0NvFI`|0@;7|@y1W<>4G@6?N9}DLW?Dv55 zX{au92c{CLry-~&Wmr``sGlgL;9f|^)Kbt;{S4(+&;h~E>7Z=qCcXzc!?`7MCLosr zf3#86ID*M1*WjBf_pUA-iW|-n<9H+!4I^X5MywdnO1@jlpKau zVIwqQ=CLF%UD)wFmM*PYf|_*d67~}|8xoH++m&VyIJkcPGBnS~ll4p}JYrIn<_}U0 zM>VLdl%aZAg-f)lPS%MJYSUT+%2e5gND3v?=EF}73C;=2=0Kl?*FI$?eE3?l0QqGy zy!ByTuQK4p=R?ZRVauvuF&rzxSh9E=8*%6qX|)+B$C!aKYwWS=A&{*#gIGoeKOoG~ z{nfo;N51a^ZI&gRbS9RirLGvo{R!cHS5GF6-9OTK9twc@&ldgLaDX@NGPR|81?R|E z+7WRT_s7~Jx)@tA2FuyG8b4PrG()VztDePviD#5lU(XGoO!bgRRo|&%s{2M&&uLn* zI-sh0;o>?1d52$HW&ee4T?JM4DrA;f*$f(>UxWz|$hx~DFkm38 z(jzT`xr^b5XxZO&J3~Vh-y3O-#?8UQ!<{~H;4RfVFilt`zlD;qWq2r~VdBGY@K<1> z?fDx$hXAlCq+E>eYYB_2scyw6yHv*AM-V3aLjyqP>p}J(#g8&L%@D9%mpC0sZ^idP zgg=EJ{Xc?#1-|j$zKEm$WPHc>g~MJ4K5W5=f{=N^^{6QLJ3zv1QgG&~kO}_*FO0F6 zARXMt1OzAeCxWeX@J+gJ#UG(bsq|7VLGq(VJbXz8FWycDN!M}(P zdmV-aWKOLWT)qugaV_NSWN;IT!bp8Fl%vlf!ypdlF*}B31RJCsSyKEP2{2G!4Ia=9 zQ$8i|;EIB^yraPE#ovH?53x@QukOZ6(QU}`ge-09OH0$W9;`Srf;)gOiD1LYa1nzL47_OOT-mQ@E=Wt0cZ{8tb8s)GTcNkK19p#>K3IaK{5>OSfjn+4E){R z6C^xArc~4m)b-_irI=EMppnD{~%kMjxE;A|^DJGhHQw23nen29wz zyoGlNmmXvxq%d2E?urts)uXld0s-s6UuDmEGI7Sw)ONv2%;`C~)sw@RP24pLvoiA5 z1{8XDp9tv((}2Goz-WviJmjIiZY{pNSI@4kaTX*nikBW?O&*5cuJ>Ewf7@@+n^O$g za0p2OM{RjRNfQ+V3n*Ny1)Crzu!&Yp9XN0sx^)$w19s`8N<|)h?isO95}Cl^8>Wdj zPUlU(19*SHkG$yu{Eh^K&@v}3#P1ON_zn;K7vpzR*YDRz&oDF~G5$$73~w5S@{-J` zxB9%aFrz`I#O0_3;fLHuIOj=Wh%g!QQiNdTb5hRSWcBrJndqiSUfTj0^J7Ss3Ym>N zj1APa*d=w9yQHi8@)bIA7rZE|*IHnj7e3-oN(EpM7M_mP+He^Lxd?B>SPq2O?*bQr zjTgMaMNAQ7GOQN0aPU@!`4S>PkYSF8kt1py%;mHB9A9wDN#9_&C(${2#)8F75%A((ViMJ%UsHCf_cy9An`S8tR-n zmgV^GVfB=|aULH7;Y}E0*5q-B%6f<6h?Zy=sId%x1-QF^Ra`6f4wRFrj^WglI4YLE zNgV$VYi9x{M^VN9PS5Vl?qn0#WV4$KHXI4fUIap5lI04>DL06TAaV!_2!p!>G&2(e zDvBI}hzcSCf&yNMsNjJL-X|g`D7$zcs0bb?0_*?#d(}Nto!yxo|NsAdKGW4**E{Of zt5>h8tG5Y9E)-2tT(08F@Hsfe6&(!C8(2;ayCaP2Eaxq6iN)2ito9smK(cHs{Vu#P z=y(!svoVZTlRJzinC}m48J5JOrGw$JzG6FkVvo1mSM=5@EqO*Qj&gE(Vj*FH{~P(E zs)E9eT*8GT9~YX-Rq>*V7{Cd((FdS`@7}hD(R;absf(+rcpbC)IN!pNdy}#h>M>fv ztt{Ju(bwQxni=MzcToZRsZ?X-Hk?eVUQAm$5Ia5jTxl-c+Dh>$4AZ?3<_O7QXIiG4H+6GC#rA8g)K<3R2X7g(WQDqYb^CeEK%J zDIt`kk#9m*SQa-Xy47q&con-OtnFOk`Fy}&q4VJw%mpc!3sz9?X5=(cvx99U+76vX zQ-BvgGQnZ+<84)bbhPb13nr+w_v61m|6};KkSPfjulqc4{=e{FB3%z2$joQE1!kyv z+dyVv|BMA;yETb5D4$Hh&Qz0j(uce@wJ*-7XGQNOQQSS6hdk5ZFk<-34&K<^mn~WQ zubY`I-HssSb{foSv`fwuXQ_gWi#(iuBQ#xaF3u(?!GZI7173>j z%=E0=UlS5F?LPdE;C~)}Z9w}n|8Mah{P@#h@ZY@14whFh-+ILi(joprAb=gvMj`6;)nkX@+llpog>G-b4&((IuzXj8pP3{&Ku0EB$WoPcPZE7s(of%_cLkTk@7q*X_f2q8zE@+Q_%K1KX^RNs9 z#&Iv!lRb&Xn~Is?!Z>v+$DcDV`)3U@aU#Qu8aX>+oc<=lyanrTGLUNuYt*b{`QQ7I z1!M^QDVFP-J?ckCXAYddVhcB*>zhTE#+GR5L$`K~>m|6v^vwH-lXtzlqit3{A7?!r zsc&D(`bTHW_3cYGQU6Yiq8gS=keAMF>0bU=d)vCXtvO7@nQ@lgvxB=vTdEIO1)O9T zmX4rIcd=8gmJP82<33^0?7@En^4J%)_pFPq1%6aRy6 z$LZni(|m<@)}c9gK6)S6dJI{{7>%I|YVT0Lu6|ZGsxdZ`TW5@HTerNG`~F<~gi1D( z$dKg(;JIQIE@t**{g-wh?c#X@Cy=h4$=9rG3t(nNe~L}Kqvmlr;W;loIOej&G3IWT zW6tq=D!|!oI_WVUXRVxg-0e8aqD@CGv-ceNTun|C7Nu{oA5URVI5?bRA6Oh(NwpvyM~eay>(G(d7GEvfVrVESJfyTM=gZWXq|J zBdJ5b%*KN#+;i1(oz}VWU;)2smkxKQ*!jdBQjOJ}Viyqm(rT>k6uS@;U;SrK>b3r3 zh-o6Yi5NE#6snFngNu!6mR6ictMGn-eFvo??(^d8*1o>)CIfK`{kR?%m&!Na#ihoI z1&U)((crSw2FJ|WibhrUHJS55jwoTQ28^_#@AYSPnj(myOojML=eIE9)c*bNacPa^DQYd7uayDKcMC1Lb? zwDZzT_vn3u#c%7OrTAUlF9Q9Ruy`x?efb5vXJGk@i;2GMIyM^sE7HuBm!U_uBC?|D z!ss?d!JlyN!o>zw%8=JO{J}bBi%2B2G~R-pu({6aW@M!l_A4yCKJ-I7jpq!63)0lN@$K#A!){-CUfY?%E-G zKy&^n^ug5AU+O&_5=J^aJRH4?TB4t;Dx&O_k)i$LpR*0UgVO9`nyG`H@T>dWY>PzFf-7e=`kJA-|7|72ZR1)>Gq{4 z4pkZxg`dbQVVHT-ZhTbiP6(^g5dGWbMPbcI@~R3Q!$!B1wbeVvRdHWt8>-OHsyXYY zel`Db`JeUjA4fIMyJ%e1GkRPtihaSw{<{`?KCv%aEW5AO@u5kb-q9?CCR~}n2|!Gf zqW|ln|L#RwJHT~&zlJOUeDBI{F~eE(yl|(H$Z@V#{R}lu<}!SNsp>-){hSvq0x~XI z6N8wncM;n{EXL#mpcLKC{gyMRaT^tFceD%PR#$X8FM6Xs03Cm{Boi&L48DMzL$R!4 zp@F$gexWBk7n7EAX%pQ$P^lRbK6Q6wy7(j=o?j2fLW40W>o+EOz7UsXkJj3`w<8wg z%vO$~cVtF>ae1PUYN;)w->8cBNcCif_tK!K==UjTtz1i>b*D_Aq4qNC!?zKKHGBub z%Pz@11bfTfHpo z>_Ca}u5@%;6cLLOaK5V9!Nu$pUcHBPxzYP^P=el15CqvvT?163dA&wu{9Jnf1ttvx0#noDL%+-XafBsLEr=ry3X^YMI zIX#DQfJv=*dN%<)Jtnj-##BDbBUFBdz~`%&kP@f8jjgH!ar&Hs@~62>ewXqXK$U+2A*ok{F$?HFI;q|Kmr8Ojbi z?CGba#urKGCZ)DT15UOQKHYg=uq2i};hu>GUAkoNPVi@D51;NK2|j(E06x70M8CkT z#~gJr@kX0wy{@KmVO!;k3d;9#=WA7zqu*{f}M$WuF)ockE88NBthGk383xe^s9%}udIVF zTyYk(eubn)v^qIZJ<$491?Bs=iq;(@2fsBrPy*yC@W@rEnA~L!W^@{h!K>b^GPxqF zquI*+~wMPvNrurw_W12`xQoI&2@l7#bCt5KEWd@b5>o|iybSJZDdf7Xrc zdjku&k7Z1JiQ6GDcCmsVAQpY7b%ld+L2#wX+}DVtUA{puGi%EW@1>p>s1yHQFgHW{ z@gHpog2k;t@GJgTXKA;HubpIbr8nWBo7KL*yt`uM29lC6xlf)cX=&AG@)p*suAZ>; zO~6Ob(hBjIGFjC*Wn+)SyhR)ou5gLx z45JtoecmvKZ3cx4h(@xF$z8Nt114)cX~5*U5Z?@wSKW#WD%aiR6ls;=bn$=>z;wsB zv=}ZcP#1IAVHxeJ8}=e#2E@Z+ zZWQ-^zGLif$W|yRo0w7gHta{l6fj*l7Jf5bU_po3t%+T>vDhuD(l}+`zFv@;=-Y!` zxm16S`2J;f0|YqCYVLOT9MjQ9?bXHz8#l({Dxy=$9Ig$=rO z3aDpoMS95T)x|?|+|8n)c6YP&3ch$g+kE>~Nje*dbg7uqM5NH)^zynrYpcdo3^q%} zm;WOwI1o2mxLda=DhfAEiUQB`k*U>hQ%V)-SVX!Tael9G>xMXwmz!aG!nN_$xslG< zu`?lO3!0Z{G1Hw9YO8i^xWW`NRcPZ3t3tb@Ox!G^7Tp#Vi0$*oV^-AyyqflD+IT$H zK$VGBDW@BMsVcb2#^3Lfgm`|RfbloaP@%&#zCsHefLK1r|5`eDgsQrp{~Yx1L;T;O zk;}&5u)Fd@%BF_m3N@TajwDR(lV>WhwB-3IA`0tNB}4HKsI8fyScq#Veo$fgdt5aX z_enFKKviK$2^xwOdPA|wB|~wpt7B}D;7%HZcUXBOnq}6?KE`1kNW()s4*wH2{Dprj zNb6tbzF^L82IJx1^F-clhkxn{?J)cUZVJC}(Z{b`LgK)%^ffm-4Zq3V96!v9tU&?8 zThXr^{=JJnXZT5?i75?#n+7RdM>A+JHl=LA)6btvXO3lW`PoiE?_*f*1>L z1l21QHiG8Zd+d#%4vSpnA^0A*6H96RY9}USV4(yS5z7j_5!Bi#XCo*UvIYfvm8tS0 z)l-tpt-1}?Cj5BX=BcJ}rou!6Xah|8n#9D}?wonOO>X3e9FuC}l#BFUrLqppL@q1| zSvP9A`;M`X(X?qjm2<0}2_ak6)X-FfXf$p>$jMaS6ia)o+ZH%5adULsa&&?YZZtIc zYE*~WNW;33jkE_h*hm^U9XjomAFE|tPsB!IO4mR35Y>kzCCElnI5F?0#NA>o+#c;o zO&w$J79z1!dB)IGEYKL(fCZde-V_Uv=3W71%(5Qkjl5Gq)tJ=)sZpLHQA`@<3rK^^ddmtXSMn3MS^=lJqbYp^|;6sKjkd=~g0`O%7;RgHrN_B% zf;N?ewlM|epK%p!LoscNg*F8qZ7Pz`wueuf)n%1H+ksWuYSC>G?uRL96XZ;EaGEwW z6PkRSBxqwGceE`EOTXkknm=v3sU)=hNat3p z?WI-PYSC@cp>=2zQ*4HU%DSDiYIn9((L(RCS5fWtBkN z%d522qT8aib!ZdhOth{>8{c;g-eF^C86zK z3d(=yD%w^++t}Bv1|>kA0&iNNQjjNyG_U7&jJ-u;b69$o=;$9do2|FlB$riPnB&KU zrD*|HS!vZ6&akq!s8owi7L^j;_phI+>Sa;tt$$>K55voAjhFu>310q(U}koeD1)7C zG9vtW59h%U*h3T=}%E~56Zqy&b>vO;eXVz{*0B&6^| zxfGqV;cMKs^)4A|Ycqesz}(Hy)5oD1YS|e%;XoVpydPd$%`l8CdMcm#S@7qL{5_w# z_~)%{wAc$Q*ID~ckVN}32~}S?lE&4fGuMNzn?YRk->UphTEKA)r3zTo2+16l|I33G zHFgts*fjxnl)$2f0L-t{Zar3V=X`P!sLEn`h2GskNp!-4sH zriKLb`Q3$tCg5R737XF<^qR=9Xt5?5KQeBI`LQ1>h0(gJV<(l9XXoj1D^G5b%`hvb9>(BiB%;!tyMxat*D5RpY0GCB;gP6nczOq1Z1p zE62-~0v+*9fNXVf+N!nckdK;nu0nbC1eh+=i@^7mKi78;&@ZV66AZroUhS50(x z5r}U3uSP1!pGOSebL1MeS`V6f404@VwV-W#6qH#gF>T9RG5urgwW0qg0d1?mBU`27 zac?l!-7)q#LGDJ!8`PTSn7qwmZ(E405B0((q3Vt5m(X#U4JYeh(V0*?i2K=#a@bPWAS!XvZzf=eAn<_f7GTPs6qIeJ@Liaw8|Gy!NxDGF^r%ZHDKGPLFM&8;C1g zQ+ukI9SW0QIfoGNA7v2JT7SVMz%Z&=q>dg>kUe85eun-U~5fFwM-c z#9A{Q&(WwAk?3>;a_m89NOPm`oQ#5$Z4#DL)iiyfIT7;cL;!xaI4NFVi8v&)>7f)M33btTosL<#2=P43_7mGqxu{XW(WJ^uE-6 z{7<4G2a(N#q&G&+o6DeET1vL*M}F0bvRI~|yd765i@n4{zMw~&DFNY7;3*50O3bt4 z1v3Vhv5~|)<@Iba1IPf{M-?$d2GG3)@udb)2^vEcdaY(4oh_E=i5k_PO4 z+ zXFg4(CMbz!cfW4*3AQ#>wC5q5wDqB~qnO*ABxT4{CDe3Eth8Xy& zWTn!kpisI$Srm_6CY{O3mq;+<8IQK^`x!mX>`J5v8`*S?VQ#%OrE6-@Q|TJEX$P(7 z5>MBtzk9l-CHM_=f6#Qz07>YYAp-2iGgx*5Lz>XDnkqY!n6&CH+{62w2%+}#&I$$PL9S9dYv^F(XM`oiqHz>>-Csqh#5TQzC62>FA`E^>kfT!o znam)pcB?iugQ!J2?j&~f?VqdK(L%-JM<)0l{J7Ehu`5aNV|N1hv6i<5cH_3Pic4qYw0&ZV6#3=dei)9^Q_v%R-6d=p{et3>((_KK3+Z-;_`?+4TX zXQQ>)5|7r}i!X%5-NO`?58*2A?hkjzwzkn)31YB9Z?sl9YO>LKM}}GEr#}-Ssj;iD zg~svtIDvE$e%w2hpRw3b^_F;LPna7@GYroS;{$`*S+GOlI|Ky94jo>GVYMiq&t?)hT>xzwu{~mfPkl^%YF8rtKDE!AiB-2c24tJ*R-#Sa>SYScM{!lR zI!Lm59CdTf3{mP<3cYTna!I$+yV|+lj*50t)4g!iZr;5fRgP4TOFA2ZKDj$4`xHq0 z5~Oclatqr&NaBr3Q@N_R9&O^P^Ts@5HA(Q$Y5=f?Bt zP|NsxeNkfQ^~KiUIYjD1))!w+5`A$ULEINFh6S2iu?2ZjU)*-6t-W`LecnB(4RCTE zPZiGGMTGPamR`X%dfrw#>dtL776}P;npY|;ujQ&vbBN^UXzMgeP^VGo$&bp>X=L0M zG~DL+QV_~=pn|I{g^nRI*Ys#zM6@Q=0FiH-AWx4-KXaK+Ce4}}^EYqeT+}aQ59ZV% z-MD#K^f(i>_;##zJI-zK9u^6g4$fINc?Nd^jOg!~Vrr)Zn#1Uy#>t>DuMz#$Gp46M zMRM}XVku9hO=3r?Q|DMX7xFf#iv_B(5rvquIUi2v_%$p;xvQeQPIR#9tf$y( zSd&tx9=|?`lzoZ+5{O)mtCjZwC52v}$pqu1xjEj6B++M1CeR!&ET6<(bShGqR!r62 za0=;R$#T_tL!CLEDrb)OY6az2an&5}r5edkic`Q3*;Rh{Pu4R3ze5@0H(A4;8H^geAqQ&nxt-78Rn;+dGl;_oE=OI+e2uts;crG}^;WOK2=zQl(MgGtp}-nYmnRupJ%#R-^GulA!T*1kiXvGIc+P=afWuw5|RWjPdP< z6%`q}XOq)69z?(tYx9DGA}uN?pT$*c^M^?bUPrZINeQeLDex=@l}gs;&o=kj_3CeK z4Z`6UmK?5fow$3?Av8Y72WBiobUe&lC8Hj5(DtMmMurM2IyL8PEjkvOgr9$Sw#rZ8 zpOTs0d=Pxt_<1f#@Nj@F4%S?Cayi z;DFt8!9D!%@%iCA|&~D?c;vc32UlR!KjsMFCWi;MESooMd z?6h)qJG;d-Utq9XXD`6zco-q|et;^}|I^&F5N-Fb2dTo@R{Y@M4Mev09zM)#^+92+ zMV`KLtM=aGhmWC%Y)-_C@buv?Qf*;3%WvGALe7{M3#m* zf;TASh)ju?P5VY+rY~akrhVeQ`rLU6%dh9EKF2$m{bLtWaadA^*I$%ys=f zzovsF?Duw+OvQffO>e-73Ho?5ZC<$6139xX^R+d-0mw_61lhkMvhI0ts~cCORIC1I zduf^p%r?}jDTy^xhaqVDi1o!v?IWH$lh01tM&dQ0cCkAIXI3t#H4_KY;REU)W1A#A zQ39vcl@)qB0Iiv3+HT@yfW3pfRj{)fgVpBq24F}32e2yyR$H5h ze^X+4v1Gt&676p~c*SUy{@IP_2akMX28|Dybx z5r10xD`b^vVH|HbMF(t0W3YOwyGgKenj~F)%SQbUsIwYFWwoPOs6S>fOpi423pz03 zbCc8D+cKoRe{x#-YkTj|iq}{1Zz!a^;ITzR{KsF}4D!s+w!u2z z7ZKSom(wsOoT@Q{qjQ$$$}mM>(aFrr_htMV+wK|uo-actOKM(r2Wr6W*?I#>*p(#$ z?DW0E(gyD8ZA^A6YAS-sT~<(jBUhQ+w08gay0D~J>}>_!$fzRm?kr9VkCsDXVlG>4 zR!z!Wu0?M?$0}B;_OgJd>}Aef3O-`?a)l)5dJ_S3aag;ZOu(60M67kD;5tU2H}go} zypSL)=^-p##5H=(95A*ic(PUKcIOF#tirb_EN|p0tMC}{;exQFSeb+hJ(Ey{Vv}%I zyB*H6JIi|l+`i6`aSz>lzJ?iv?Gm$7dJLAqNM`ExLQgF^7KCI@@x|{{c_hTVwr>p< z(U)#B9=(+$c=R>`_EW#Zh6YalYZ=f6y4XN@JBeZG60Xtiv|6t8NBI-t5yb7M)&PIS z83|93fp;i3(-3URh8z@paS(F?PF>7Z96VMW!Oph8)-l#j(E)vZ&8sPM1>TU)n`4ji9zL)NqJ6BI~pt-Y*P)63z47PC| z0jbU1YtgYX^7ZXKFzOrpJ$^`nyb|C%hhyOTGJ^3O{~BZ7L|%M@v7zILs$%+CoJ_|J}`jn zReUd1#1Pr5xKy9azib8sxkV@@ay~hJ(*DpdV0DgV2T#|PTxlo zGIJe4EHei}*-!YN?ppBuq(o0w-yEOhC3PFCRSnwZdIjZcxk|gR+TK6*A!|M*pj{Mr zt*26nqtsqsUnMt-dy~C*BU`F!-!WV@w^?+gd+MXp^*^Dba~^zjUe70d-PgA4SSkd3 zdiF?=>f`ekAcUnR+2eRp{f_WJs5Pq}ChyqyZ2o#Z$`wP;U|XA{9L=@pDfEsuKWN$3 zlOZ*#r*|^JBVc}q>75UdgbaO<0DI`zlrzlUg}RXx-x;PsHsx=1#-Hjz>)fQEd;?c$ zomU`4Hccm((fQ0;n8D!nv9GL7qQ|T zsi<2?YJz0~3(G#Dp!^}OV%hOx*~YM>SXidOW0{I1{^?iCx4cIFW}y-tixq}YEq9No zTaG$kYXlTllhci32GU@q#<5!TW@&vbyw10*G3a-Td? zL-n8)rO72+xKDM_3Lh0$KqA@iA-iHbxr-#h-hqA$a1RajDj zY#oK(h^cba)RBKPCGjl!sUQJKmPw3QrMyzpLX^PPc5Wq_*dxvr;1xj z{*S}zonY;q{1rCyFZ|bmJ={(^JJ=lNU~%~H^|W2#S1$3D!>#V-oZ&4M{av1re`9YK zLO0E6XARhU3Zyl|-t=i_uzDT^Id_3`PHBS}70*FF)nQNkrQK$I2p7!g00{3G!=9_MVxF;Lg#>IW_;On}fdBF);Y0j<2h=0o z^NH%5H}i?ghaLMw<+^sD+bf@}kG&QXt7Gg2a>fjZ zneMqor-CdGbpyz!G!1!sL6%e0q|S5IPt~dAq;^oJ?9_io4>cuqm(%p|k95~5vX@>XPk~0n2b3IKZaB@jI$WsdZ@62P^gut6^*D-c8`Tqy_xbAee zNdp8<`yUb5MhGwqG70eP|H-riTkhxvu>Xi2Yo@ms26UE-JIrPq-KN}z?o6=h4zoD} zSk*IPsswm`&nXFzbGrcn?lha}Td#1|b5+0RNxDrDP&jN-6lTHsIzeuQQh3-GttN># zu1|NGja=jPk=AK8(_{QUoMvO7OpSAz%}Hn|w?m;89dACS8~gL})394c`Fr-U27PZY za%=E=1{elZ=H+*igl%&d0k#d%!C&~x8NLHOk}m)Rm!X>`q`qUD@iSyi?mz3@e~$ZH znb{a8W<99gNM%Ao>tNJ>r!(DMeLd?|-00W5&T5ub^l2dYw&_$aAj*p%x-lUupI2D^6xTUS z>R+V+GABifuT}86CE{$``0K#+H%&Bw^cY*eXFIyF$-~Gi-Ba!wque*)-_kkrgdH z>nisU`0aN!pAy=<9ou?OSUJ$vyTeLOo!EBxL$nbO!|x|7bRjlv?47;BB2O497eb3U zedQKyy{8Nfw)LJqba>$@G+tZpIYYa*^^UBw*K-Txe~{Qt!V^`|ccnzPuG|Ycg}>>( zx7|Jb)*kZi;Zb|&a1U0bcb0p&&r(is51-OQo4aSTj?{gv>EgDSFnjuSvU0TQdbVyf z?w!L;e59;vi+tsaAQiVoK8)DA%8UF^$%)w{utU16aAF=C*xl*$))x7ws4CmTPDe;s z5^d2x=r4TsaLJ4R#o#w;wTnMaWFnDW^=UnKSH48<-25gbM>bgl$uS<5rk9*m+epRx zmVfUF`^?%b&JK*&=U+4$QX~p0_X$;}Gm`Thnq#u;xdu!gQZxSFGI?;oW9mRx%yFU0 zd(~oY|4c8A13wrakQ2*Ll7{1yb*|Bo#3xEn(bZxiJuIoF)rYacCCMW}>tB(QxRE;( zWij#;cleq|<|xD>tmwj}8o{ewSU%{gLiC2?S#xH&7bmp6 zAbxQ|cC6!gN9D^Rz$rw&V0VhdT2nHPUMGQ5P0I?s$%Bb?hwZENi7mXS5jKsDZGlc@ zdQ_RbaiVA4)lPHnbDv+F6ZVCbH9&L(tj7sCTmBuUg;`yae7!m4S#J7@J5?jhbh7l5z!pz$?4`(Mm` zVI~hXH^3!CUCUpm-6-_`Q^i4bz#2_(Hk?14dxg#Xfq3xn&uON@r9k27mF5pPe0UAb zrpIAys-SR=OFVt}Vd^FNoZ1bG@?mAn=WAU}eh;h_2^AajCXRT(vO z&BdMy2XsmmaFPL?Udr*!B~A(x;AWf@4Zu1l#q?kce1R-EahH{d%{O;7b>i+MCxsE< zSw(f76b%S)PKxOX_d=_MWs(?3VZhhWX+56qLWiRqMp8G}{{{ipBU<;0=%} zk}MJ%v?9kK=CMv~b<--eno_HqwdmM7t*z&M`0na@lo0T2(u|#Z<@kYvLj3q40sJ_X z^TxhmT?9)sJ9q&n=96Hr815egz)=DwWW0AEoSGet9lpRjeK`_w}Q?z{Zbi0#d?WtHp3lv9}iO*qiJP`)6iG z^8Gf^m*VXbRG{PSLnOi5hY7Iv88m|f`HKguusrQ;^sw{@sS#)Y*Q3(0R8_&!pDHN- zn5$U&TCwzQs^Z*eqF|{4kEJS=u+&6qQnFNwcCzH_u;0Q^ z?S=Dnm>SuWtCrv@(w$sAN)mkhIRSEo*$}MZuXp2m$rF}-Mnc05stS;%aRueaxJsHB z*ZRkHvI>-dG%4_;Nu?5L;xuoba-}Ru~D^HCYe{cIvSAE#G zQfCve9k>*`8!AgpO6vpF4#B2?{;#xZ!dV}z>r>OVvZHmnKBWm{T~O*%)51yml+|ML znCert=qdZuI70Jh{+@o6NPB%M6XtT-9edf4P6`KC3_p^ce+SpHZorUSz?EKKduF#n;#Gqt14z3r{Sa7FfbktHsbw zv9uPQwq3^lRJ995Vv2_gsyzG)N$~J#f|!S&G#31oh=x2=L3sE#1?8u>iifWg55H^` zC;=WS@OY?F2@jo?KRzryLu9l^eKW-|u`WO{aaw2z6Rj4*H^szSbX6`B8*u#3RX&PL zkB=<@uPDW`$byUb_)mh^2GqXxFY(_6USG#Qw}5lxo)xK;`tsteKvf2B|E-|RI*;-8 zZ1Gk{s)i*cz*_|#Z&fPA+mR>CCNh`}6`Mxw`Y`z>NAoZ_`W`f5LK_0r_+1~UQ)^8U z+8Z?*Eu76)7nHT%Kzc2{>VYHNqWP2fe47iGqyu8;xcE9O0 zCBR1o9v@XI#m9}uv6jXG_GF71bOWc_>cSK&rv;d>(rPi3Q>?5-r^kn1{1;j0d$*W_Nq#tfe3ug|^adbi|Ad(nE=bh=Fy!r#1ta+a(3 zd#?EVYAWKGdZOU30*}8c74w(1;&z^L5#OQBMz=F;RNV7-^o%W=U3DqwVa_T#T1xC( zW-#*WIKNMKCk+eHi2w`HGa%n2fR76wm!`Lnu8gewdERDauJ7J zWTTJcXNoCrAd-9A6uCYY8q=Dfyji06uww-3f>RHeRwU>Fwj17RF`-JmA6bh|l!>pO zHRs}eBVRvDEK~jA%cQ&hFq0&hIE%pR4^P08V`!bn`0r0%>kqRfe$(~`RY-r>QbD5)1w(P4JEKX$8MN7EbV+#A5nMtP}jY;3W9d!b$|+YBA|a34Sd)7JOgs z--39(i@#@=Nc=pxZwYi#ryEZ@NkZ=D5_tA4Cx!)kAoI8J&-Jp-)0xm4G$G&BRB?xyuc67J7IgR9o zVkJwrJ`PT-{=bpztlhfcBv#YHN-PSi#TqDOQPiTR(xL1btv1?Bl%B}1c#H_=Y7Vzxeh&WUcgonl9;YkL&A>p7n;ovwtP$4>G?()_^eqjB=h=r;=V3Zj084wG?iR@cv z2iehc+4iI(&ibPgmyI87)7F-rWgG9{W+Hp$mSj1tCCD$`q?C;xODCVDA`Red0T?xOloD+eMW0OPIY)WUvphLaHT(XfxGAbsRD3d+1KZ+&DF*v6lFRswxQf!9Y=D(NE;Z#(M+ozsX5 zOQ&;(mNN5r@LAON`R*dJf5ml!c$JK=82Q2xfaiczjfis zAyXgT*VHjf)5A;J@SG~t#%-voOA_rlN)XT0*T5F-*OU#!ya^VKkXV<;nlY&o+Vlbi<=1mnn_i?gz1J#G z0&S|mYg3g<+O*WitgUB7Iak_|oB2a*qSej9A?*-7kBr50rfcZ>NI1co9tjSE1X2vI zp%((`H9fpUu+FbSZ7f(agX%(+U`-1$5iG04S}G-2wdg7AlHbsjf8+1Tm6|#w zSDMH38f#}*dIL$w)dqrCPrL@1;-x?Pj#PmWgcr7R(T`}==#N|~6>_>p?^&TnFY#P_ zL!(BQh6C=lIy@9QeMmuKJ%UI|4;Y=O(57*A84fm-wwG9usJef&Kc zQKO_}M0={7?s*eQ$jF5RjLV0|d#Y&ri-;)}r)zr^r|sXYpuCBz+WswSdrjduu#+g- zUV+#4DwVW-45>i_yAioABz3xJ!6co|YB5Apovs$`7@F9u-kvHEm*SzeJvkn}g(P@* zF#$Y0G8g?2w!y-;5fPT&&NVutJ|o?W1*!u^zC%Iztz5;(x57xBkE>X?sKDc*iqyDx z2~W|3fJsQT8m+1nskP`>b`o0O@~-N9UGP)19?DpCm+6#CNrKjQ62v;?Q23zz$&c|5 zOP7$S)k8P+KB~j+mq^o=BpHxFXJkjFP88;VRb11vK4sm zovIY|=*+3XS-Fw>_YThOidJIKZE(l93!7x#z~3Mf0(5WtdA=UOYc*)msB|^ zu}*ze)rqyxL#(e?P<}U8iS^qh*55K2Py%ADz++C1#Leyo&Ln;Z0y1 zV`DVLiNZd{?&3z+NkZ#mhxtbbo)$aKj0CYB&N4Q{It_Le$LQ5;$myQQteb%C*OBp6 z`e^*XdY9WF>1hTNMmxdfLI**lOBA zfL90lf=B{f_&D^VU&E&X)W^NFbF2gs`8Ckia4Gq%MNgJrZQbBwH@^I;;ZyRsPK5w;a zx+KpW=%~PJG8LgGNuhJJWQK(ihhRd`Z$WvdNlj(;kwG&sDf_4v9glIot|`zC2k`fF zjqr@yYH0K(xj=3urs@L8;uyIA>^8lDOEq@xa+CvYcMxqlCzzPm$0vKUy5Mu_Ll*dk zC7t(nDx$4FNkrcO_(>4vb8t zWOzk}psRS*X2t$#1)jC*zm&1~uFY~hZ)q>s^+n5ZwQ|Uh-V(f;_SA3VlXQo{6GnDM z`n#i3$<`II{F)zFI1>FV-s)wEcEZx=LbUvbp3B+YFe7?QL&NVVKHr{~_AI!;#r>YR z=x3z%Y*Ov?oosL(un@k^ky$?v&h0Tk`H{tsC-*b6;T2~@kFuuF(LJmGfb7W1vEbbK zmv3dAGz5Mh*|7J7bMk(Rb@%`ym&fM=mnm*RlQ+EZX>fYO%F0!J5ck&voo-6oNc2xpJU8zOUT=A0S6Ii?a}u98(yp22m_j4--f=Ga$h zxv-=JKHR3jGsjeldSs3<=b=}E38=G&>H-}xl%UZ7!Q3v7yji)%DWd)IQlL)hSjcd{x9d$g+s{1 zOCMz5SVRl8aU#$2PV=$QI7bX7=y7q8b0K+aq#Cj68slUK5p20oJb`i+--~px+uw3} z@nLB;QPXc*6ShqK=PD@k8AhA>U!k^p0fgC3O%zjq1zy{!R6OFSl&L;}vJ@G~3;Ewp_L9G%|O#==9CbmaW(AulLVi&wpqB zYxql&PUe3Ue`Omg6+UaXOSElnsM6W8Bw7*#!xy^99d)mi!j)XYk(>7l&NT!J;S4?B zR(<}PrGKLO{40CDyZZc)J%7IXe7`+^rTT0yZH;`R`h2scKU{r&mp%Wg`izMO0SO0o z;RsUBl56SN=d{oW+hGL_tC;yiv%-<5lVbgcL-e+(v}dbn*qUnjE6!NFlO`h)qs84d z2@*7=N4&?IWzpW6%NoQr)?QBtMK6MBw(<;Sy8CA=UOUr&!haFN%2i?IQqt<0TcYW5 zcDCj^Th~nzQy1Ngl*$EEUrLXIZOurjqmRRS9cD(~1xdd#$#orO+D*3gQTeVUYx)k; zk3H;l*Tv27Kx=sQ0UzBQ;H0NoOY>!k&MfRuzf9U*O;_a0_W8XJctI|W>a&xRbu)9T zK5C-kq|K86Puh|WUz33D+@#j;#!oPvesVji>QX)aswQ~NC(_NqYqi80%CubKCtE1@ z@1)etd@$G?!6m5fEBP#dPrzEmZ~IU z=@JFyZmt?j-zj~()+$f}W2pj9AFEV#Eaiw!+;a5w)t3V|EG^(UEGd==mR%Rwb+KKy zvg_7dqm$$awd0f~jk#{?V14A=aY{`f=aA_IocBWXByeuUvMx9c@zcVJhj^>RIOz}Z zwb&`zntde!-tVBN*4Ao?xUCZ-Yd3btE4KJSESSF4VTpC4madFVa;oMQnQkPx#bsg! zdJ|8X%QWY2N$13#zL_-7!afA2A~9W7)*0OiY%02?T2WW=-&liHkQBSMnpS+7pG2__ zSCd+b|MAn9%YLMm)>VAoPh^DYSCf5AHgtjnfCh{$KVj13Tr^42DQweLQeu9`^OR-G zLl$j;y*xx>wVu744IEvGlxsg0a~2uH3T65#yba8%`A^IgIiCQdXN6GGt+Rg<;H0a3 zSi)3ov0G;Xe`D(Sfu5v3%U`RnW=|srve}Oy)Gw(A)3s$YAOp)Y(am(DfhZF(#jUQ; zsMe)}xn&8cl|t=)RIO*VPbBs3PNJJQ^d>br|4z@9-x_C%amogG{@@?pT) z>oks?(a{ulm_(dSk{#txmh6U1bPx9rzC3Xcpil22Vqmvi@gLOKeVq$?uIs4zIjji> zy4oJZb>YCf7>FL(`-vui9+Ht)&K2!3%+2=`23x|%#aM)y;tn}zofFK9?u_}*GJd`f z#c~k5&lH#AxTv;3(gh^1+28`|U{eEglEcYbI@t2RjxI&Bpl)8u^Wf5vIlqYUjI$j= zwCgn-rIQ^!iUk(dsSj1Gx<3-7f|+dbmvDt0t~_KDM^6i0pjPLTSXM;}Tv~%&s<<3U zfix~*S6^57?_+(#w>T;L>s#sK>sm8ci36rQ?*VO1R5q)XU4Ytgk!MV!AB)l;3QttIn3= zDNZjsLcQo@-6y!A?pR)=P2(`1>C4wt(IJ`A3FKy1DA$P@>OS(P&qWGG?*h{3r@3r; zjVe_9JjEZHCH^ojn_jEy9$=a`bLsFWsb+=qi+XbPF9B5jl&9Z1KaeWoE7`dWvwM%Uor- z;-!dK##}QU<7bQ<^UJCzs*H1ITIXc+M!q^t7L(DA@vUZ!Z1bzhm9>wuo|WCu z))&9?5d^o~5^N=VE+KVWtmLx+RizzKIfv(#BGQ;Ge#URiedWR@g1wpKP-};!b6wfe z>lJ^IU^lU zsOKXcNy)=A#rG4%m*dG8>viJBHjf(`Jy+GSK3JntyP`8l#;8)>=%)barFj4ijebs& zb&t=0U7RITe8y$CR~bG(RffO03|~-&FZvk{h--MB441L_ZV_<4q+Iv;xe_>I+RHsO z`ekMK%2XM~l_4I>;O|$-6Gr!QtvsOYCdXl*5K|t#s0@rFFAlY2dsgIwan29_8c~nq z&GEd~ zkO%9pO!@7zfg&{{4b*f5)#d*gcqcXmWpS5FS^P0nPdDH-4z- z%$yyrDhVm`e~3S)%?5}B?of$@QCs>kSv`>`JPp1<6B!hn6K*JF^2z@LYI!Er{__$8c4|6&O-?g^`*%hU+@UPl!;*&>jo*3;phZ zRr*`!=2?BjHJ0#IA2Hrr9~nt_>Zn(uam^AN6=Zx6E4|L8N7uQ4Df@XpLe`1VO@i+F zm-XsvTtSMk2?)VRb73H?jh6AB{@k zMqUP%wrz~Zkt5#C_;|20I)zb;!Sju_X39laAA^@Phru$B1M`Ra-P6eXh0X^NVlQ>` zul|OkS26BXt~G4kRhX|wyb$yEaa(-#ObyJnG#4Gy_DxF18(y@hY**M}{d1-G;&wV3 zb$s%K^{s@#eDdTP7(D)3_JbvcZ!x#&@k18sbf zl;EV)Tr@^vU$Q4jedIZqDkZ#xK=u=BB5L+bG_IV|;Vpso{(s$M?s}5o;Ee>{9$bmu zh&2vNbu=`Nl$IhNovr_BjyCVBE<_Dy2^6#HXQIZdM*U;FmyFmd0Z~)n@j|6)D;D@w zS_UDCa(_ieHfBTd?X-gq zVOqd_EE{Sk&sW+K9E$9G!(;-?JJygNR-4R56U6#R&*r3RLLaG8gyaqdpw?mG(hPbM1te^0$CHl$bP+C}0bjjL?L`2r>hxe_13^G}bzlgQ$Q^?RY)tEj4x#Jd!f zKh9N>$acy^T`2)cRN%2jrE2Qx(>%rM>fNTU6cMW{p~eP8yM9X1)2gfb7&&z{Jw_$L zPt=v}`2-%Z*oZ@%;LXa_XusT2fcj;*_W>tHt=7QdhO;&HVk+SNG7yGE+Q# zrG|?2Rc$(Xwo$GZ>#8Mz=7# zW)|`x3%V+wSAAU-X2lA=sDRN|_28e7@ephigxfijGz{hiY}hsPRB&a~e9L54`LRIn zCFrP4Kl-7o#Q*#JnSS(0jOSV1d~lAe1B(&L&v3(RK{YU2_&ZsXJZ;4vqB4pnWB52U znMEjD;ls+r22Jj5mf)}tOCrM6H$SQGL&_SLa~alug&3wQuMFFZn#;TT9pNunvHpmU zASQL2gt?>g2dOpICTkW_}%hu8!}d?$}^cN2k|)DT&-Ym#}u zFpSdQp9eT_Dkf9kNMA&)Y$mEwC!CdNxLYE&zSx`C`pIKr9v@6gMU7}S{%z!NHvTaX@g1ud7mD=RR|wd{y=%tyaDR<}ro(&U zRKI*8T5J58f|9Q5A0P)?=yzx~XFP%Z{=#I=wN zRYIh__!L6KMsPh8t|fmB-yNsIx3FGy?xBgK?LwKdR(1hewTxy~@0wJ-Khl!}Q{zK{ zjfcQCW@ykY-iUbEpgXr!TfC=+(;CBRb#NYo5jFhJm=exsEKe2A=y#Y_Xii)YMAkqQ zI8K48#l2Od)!X6&@S$g)Q_@u$>d`~Z)w_(c(ZkK<{SR#$JACT9v(_x*Er}l_m zq|N8%I&%ZF!cHf=1v%ne{yF)Hd8@H_I`c(#LMO8-ee`x$#{IeNeB;b!Rck^`CDcvy z&05@F49>V5`371TU8li0Z){P5zLuuY8=X~-ns%eg{-q=HZ>XAN)$UL;$(%zyq2_){ z`tPLZyQSL+Gkv#odv2KTX-eTR>yXzh!Hn;gzF+p#sCf|Wqoqpq%vVFJ!=}@#``N)U zzJvRos8!bGx_g)FxJGR9b9^ZqosQKKH-)YHhv~K=;dy1CbDnPK`+0iFD%`pl;{Syq(zS35QWXv z5t@GF{zuwI9hlwxVXSG-_4v%D@^GRvpMDKX2f7GrSAEU!gRC40=*?L4&wv}dem)I_oD4UK*V%V*PL z#8j8SSgexa!fqT}C1VNb=Srr$Y-WYdR#)t1>pq{CEr@kEPLlLtTyVyg$WdzDCllOA zJ>NI^QzopwF@g@a{Br`v_C=&)NGmaHbIfOJK|ZefMN8-(=JQWvFeCar*`4&D<+LOsUZ*|qnGmTaGJmtFhb_d0V{uIXBFnX86D zVy+5UVy?38qsPluYe`OhPW~E9JM{Sz#K->Q*HQUX{GGpsIk>OTOM3SGH+tq%MvA2n z8gpAZbRB&zAoR=MDk%Sgt7gqNs$V*PvJ&W*3Os$TQi(nXQ$uL!E$H*upX_1qd?O4r z0@ugD`ID!`0PS4mK#%-4hR&$aasHcXYRy=P5j7LFg1&=a?y9`8zXr{i7{RqPzQtv^ zjk`_wYm7R^qu;5NV=&{o3*RN&O`*S@U|)cU9TA|NNQTcs-_;#v6Q=+qm6C|1oOmKYvvz$8h@3 zhvNRDSoI%;UjH$6C;dmTtNq8S>v9-dZS)^diTlr_)LaC%)Ak>UK_&uDvL2(e?H)84 ze3~TeroRgZ_o|OOTla57)LrV(j7bHNvwtZlKf_ge`4-99*AR3*twa=ZrobayrDA)D zjo<&^i8sIO`YhL|LTlB5>fZIK3spAAv>>rTY(%$O4C&PIGPUT$2GO_~1hWJ0Y+aG+ z&2QZIknjc2pZ`q~?@MhNnwXCMm>0e(FA#_Sq!UkpZbv8dHqVPL5+$TN-Xyc@^IVH> zuWyApFS3BZ_X!2%=eUaRoHg4&cD3VPYu2MFc!Q-X(LX7M+XWsO{r$`zV$Nmwq9bFOG)6qTrq% zyL)-qepCDYn@Gw;a5>+1T-A2_FOg{9Kq|lHg`L4;?1jxJWnXl8tKz^yX_|w${UZ-q z`zQ`sZy`X|v)P`Z-Mag*gcQ%h0ld&=(J&YNQA$HK^$*f+x~YU*u)mbGCn*!B6|31@ z-ofw2cxbO)Nd*&IDtR=#w14KuRlJ<#!Br&up#SCLITNN`Fv9;^{Eaork}G|RS%X;P z?l4c+Ga+77vC7qn^8-b;`_O~){l{9brdB;&XXmFJ)!DKh*o$oAy4+y4mt$Z)n@XfU zv`a-`jIFwHWs}!ZRF8{sHS?12^$8}mYCGI67;8UMO8Ibpx>jopflC?#!&Z-mjOGK9 z6}8DDRo=KZ5ie_PVhCEBAm_H{LhP&PVr_!>`g@u>)Pz>LGMig#lR1h*M3ok|$&0}K ziNRGQ^mY<>ZSp44ALeguVs)0bAV>W2_so&A*;F=4|IcsOys_9n<{HbOmUJCBmBwP5 zXiNV=ypK=F>oZ)h!ySJhZ=-SBUgQ&QY%s^6I!oz2hO0G@1FrlifzB4*8`8b2!PQ0s z-3Fdkk;BGnb6v|s$yGW(U8%K?pe5}?XR*h`PtH62=vcvb?IM2G+Qsm)cKKc0SH!}K zF7%r%buY@SjsBeOH(kWXZPd-Jwb6XV(MC$MHVOmH<(wW-ByH3~5bKd)YZ%3+^oUeS z@i{3I)o02?Hx>5cimA$POw|p_L}^Z$7R3y6>Tvxr;cPp{(OkJ4iPtgrG%k??10f|x(M z8-J`KK3zimV4Gu9|BPHkbs2ATQ(4Fb-YBo}CN88j=Vmw1C0$L?>c&{2f*wokF_9h4 zfPf#W%JD;V)c9c_j33X&{1ECDU638l18AuTXXDKa;*HtyOPNsr%<5f2V*H-(H89~) zjH^7F^b-CYlYuR?Eg3uqr#(CS{-fmQ;~1pl#J13!@dFIUDioHs=W0fOKLmJDIML&I z^W@WvoS`7B=)g-Al(*rkqj5egL*X1lN(mf|qrjU8s8oEQkv3u(=0kVZCIX5u^O@IG zb?=sZQ0hJF_V0ukE%v;He+DL8#D9C3uz~-K&HhL7tQTFCmi&`Ewm6eeE8aLZM7z{UCv%rL1sb-Xl8C zWggb7k)4gOn({NpR$ETTY!Cbu=G?^;ajOSG8#irp+9HN&f!E1j4t!f>hZ^{{Fk*45 zf9yG!!FN0azAY>(oS64$3Vd4>Qq#<_FIdh=;O{ceRIpQpg*qpX3~H?pQ+{+o>XIYHG@MVoH4RMGCh z>%-3ud`D%+8hDl}?htq;jZ~_HxfrJkC+3Z(z;{G>1J9{6F?c)l%iP6F(Sd3Ro2<nKd;U!I&`iXL=j^nW;AE)OJ3DkSA|HGZw%BV;_9nn!PaG}3 zdM$dOwKaq9JyU#)KVp&l537>4 z-h+p~uEbw+nawLeze6k?x!LFk5Y1~ammzF3plj;nOylIRadOMF^|v&xAoMD5T#d1x z%?YUBKQL={%j}jTP3(<^uA?-%MOZMtUD=1U#AEURw`xQAwGSe6er;u_?m_AC_Mm7d zyxW74!;i)ul&l3^m0eV2S7n6)Ms`)u*Ld$qCMeNFkJ}ii?935&B4F7}u7g|*LaWU8z`UZLOjr@Bl>IEc`(^u248~17w6DL9n8CL8^pMy@4de2ayiJ!Oxwr}XaYShdZaJtY~e*;7`j*;5&C)Vx(FI}x!+m$ zYEZMSW|G^R&+bZmEaSUzo5=V9z;`mP46%&st(|0-RZmsIJH;aUjs;znJyc;=Wlsf2 zxQbJ$lkwgl+{Upj4CeBRrMuU=ZrThrZuF`ETv|oI8qe%p&+t1*L$>vH2ePen%=q02 zoNOCFWLpXLQ7=*zXCmeBXe<3eOLELp@|C?*o=r{4-oJNP)^jw66ih=yy0n^@b|>vR znRF2|u*yo6>ajws3>}hG5Eq|I@xi;pNUTU`cQ}}Aon_mh#2^xdnv<>B;ux}(tQ$S~ zq~nLyjf_gGLLy`2n8=)|Jy4cth);BL5b`4P7s(AGEInzmM>k)QJaHNu#-<88c~X1V zEd71@Yk|#AmMHlW1x);y6AJ)B?Wb!nR+@3t`O?)g*Yq(A1X=mU&c~XYW)&dub z5wPY!mF=n=qyW)TPL-d$CfFK`p!|Me^e7iB+Ls`fmk7%ec{z$Ka8l_Qedw-P-RQVX zBwg0Y>x0}%-MwmH=E#NUiC87@l^zN>$ufN4x2h=o%E0 zT96dV%AcFGXFY-s9rf`apkw zEHr*vebQZ4Z!+Ae0Xzj|kLFL2e)?s#KRf*-{ZZ3TR;%f!|HIpRfLT#2VZ+^X&YrX6 z1<83?Se6Wub4CyeOHL9bibztzvMikCY+wT*f(WPxN|Iy%6cmxTDu{rBiXursM9c_! zCH!wy^~@Po@Or=h`M$kZYToMV>h9|5>YkpSIYm$ricd7;6X+jYx1nnqxwvje*VH*2 zpGrg86`wkRZ{kxIT-xy|w5B70|FWhlPnNJ^qL>s+=t(LICiEhLutf^~%bL!saI>t= zaeGM|X6gpwTGLI1J+9$D#4$ciScuiaOS?i&q7xSj_ay}l=pF!X(o^DKcvGGnllFi? zJHrh>g_`hq{KS#B>Ztr)x#IIfw3e$HMH|GOkq_g7G+|uiG2?<2e}UY1yB{fcxcY9e zCw8=bOO(3bAIA;VXoNIllpCy?Ub!VBjhjr4@3RW{Vw%&b3ogB=T{_M7G`&*kMxGaZ zc;%MtZVX+e_1`O1wZ_C3@2pXUYQAV5cJB3G=o1viVC?ko@%oRt6eW-y#pxrdkF%}+ za6n4Ye{P?b+EPC9dG3eM`Y+TJN@Nq*1A^M_8W0Ta_1`y+f5>v&*I-}t>{y) z!uIFcHk1Pv9SCCP{TFvbieG-yde@x+obgC{ODXrx;4 zR5|_}H_jCOK&!`sw0ay0E_o*@s50HMrV}Hk5G8RlI2(S&3|tvww1O;6E69G7vj}Iz z82iC^IoB|L5YpVkt7?hR*b-&#u~krtlA;Tv=tfWS0+WnfWt8=IZ9OJlu*b#3*ive| zG-yU2E)_pvM{aNnk5q9EP=3OWQexI)ODX0{%<1V~AWSf&Rhu!*or)gX_U`P2I#}s4k>kqhmPuW^|0ir9G#F?x9HFAIC>y zGLaS2h)KbOaip+d!gwMW7?d4K|M?!ut1iQ*@I7U;momVFqe0BLNRe^zA-P>4R*1P| z6w+l}aDf;Xl(EW8d|-o82Gc}>Q*uKsbZt~{Y=6y)Aq&_|mg3o^Ca`CdU64q%5|?T~hN88IeeZPkthf^0 zJBfA@CO_h)gko{1XiDT(*s+)@>hdIp6pQ=AXx}<^6+fbW4*3x)Wk0Hqijg0Y=@aN5 zT#un^G7hdErE9V~uE)|f8H;_YIdZyuY6AGir=Gy2?Ngz33JKhGof5h;Z%bCPV%jh% zm=I4Y3nok_0Pi8=w*qvAJHNg?(D(3Q8 zhPKas=k%NSEcsE$XIUxxY)e#;e3rU4f&RhuRJtbn;(8KYQ-9)m8eNlZ*k?N+r^{y( zz&AcS6PLEn;sp`2P9OpJ>`i#~%oykJ5S&(uUOh^)vOaxv^SAnyvMC=PdRveAXMTe4-23H}E zRN}FNa&^Mv{qVPH<&Z$NOPGOw;9!&i4)z^oG5Ku?u6;cH%l@6m@Znd)iz$!bm=Kbw zig!#{cCS4a>R~9*;bbXUK2G;4jSo6*E#((A<)0d37hYwKsc15aBYh%R%oc2I3pSwN zmWQdi2FBvjWcK76JdIPgm|hW2eu(;sVlF*nAsf@*aM+gqbNe#cMNCNU%BHm4l`Q9S zSB8B5*BZL;y?@h};;-aGA%A79?5`bB5%O2+?gaV=*NJpZeae2>4H7QDOab5cDx zCtetmX}DN)u{?QV0=Foh{)LBz$A@DO$SU|LuqdWd6{@tgrW58xFpjIRJUcHAtQDZo zv6n{$Nr^abD&;N0S+N{=*j8hd&~mmKzT-s(hlMFygNEX*TvKCoX)t^1E%sLG8OW0z z#9Mn(SKS$Rd&8jgpW9d2x~z?SmCeY$%KNOG$c@Xk=A<^b+?b)PImwTIaQapJn0zke z$E=k7xCg38eoS4TK>y%6ovx{`*^dW6!gWAzKKMAG_cTc5H=JX83xvCnNLa!%MDltQ z7BLM=cox*T#cSq?XX*IG;PMC5Jj^dt8Z38CvZVW$@3k3K0j z6oW5~#zG<10MFlm#Bun1Moy#pCMQ&B#iw0zjw=ooc`WR)?t};*b;C9N{sMn$=!p_Y zrn4<{29HX!UoD|)qk&f>uUj$H0@DC-<5FNy(6!gO%a)1z(mFSkpL~}Z?K}ve(rgFC z5j=vK6>-;u-k3tYvBljRc#DVT8kfP}q~vHaAz#53w5DhS`V-rXxTyLz5Oek@n$I2) z-_IxX@xHrUB)kP48cs=k)QB$lC=n&tb;Pp^hN@Nf2U}@+CXK(`_-}HZ>NTs^u35Vl zEJV?I4E|l&*Q26l;CmDJ?Ch}`T19n#a^j<7M?OIk=hM6@=Dbo-J-e&iW5f8no>33< z>_Bxd30xk*HLBH^agUHN{w$?+?-$>!lA|=he{^m7pemJ4apEuhhbF2SIG_A3-nEVb zMt>;!EjKJh__w`a51K<1*lG#>!`U@85|bl+HdouR%`5er zgmV|&!S|{A3*l|fYD#^shLOYI&!@T$v*kKM%Wl^430hw18l`$S<9-5X;@}amxY&6T zS}Cc=oV;Ub?!iy3)B1E~5zQEU7P{f2HLEQ7hrqM5?jmF{Sd{pwh;CY`3W1 z2>en6PMi4Dl7qJGKX-Z|(zM8@TEnKIWdLeLnrrJ&4Gy4I)N-FXj?(0+4`yS!YOF)n z_}uV(s+*JJLUCJj)8Y12I>v#NHqXg1$vP8k<*CB9bTf~~o*qi>UA-8H*xeP#C8 zSBDX$WNd9kv=B=kcKWgmEGd5Qo1^cWXl>-WUokbQ3|H$Um!1$2V9B8G~B?g*8vs=_DsRnx0Z4WLi748c4owW{UB>|&8N z@8c78t;)lnMJ^1sl36GQ?VzaF(KS|YVWdbqzQ#zAt1a+nxvJ`nk3D8IerkorxrMPR zQS=H%qqKZDd_%5ky<=ZhDru+IL5n0cVuyVdjqQi2&8R=dVh)hhe6WFBJqVtpe)yZs zTZ=2<6)9xLp=wUK)8Dq`dN{lyPF*gbG|_zY8T%^5DfcDk>i8qJ{Yt|^V#zkJfm~gh zW{-eW#E6YQQ0+S+M~$j<)dUadeJQ-QkdwLWamdNlAk0s4wF&yGh#@j;p)utFN8;sLlo3W9OB&N7N*&P^FA=huKkzs&nOYu9BRq zsm*PDAH#QLPTA?Cwsfv8VpK@#PYy3PYAQXwAGMOmS|2l*T-CrRldHAo>@t!NCne_G z3ffoCIlL-KHg6nC6YDN>;_l<)Y<=Itx)Ng}3fVTTLO{JYw=y`n@xoQv_q1=0oCG5R6cr&{H%r@#q+VS|W2T3%(xShD^B%OOPTXB#t_LQfwP=7cXRag zQ>)ST2z47?PBK07KNs&Q%{-ejPbR)A-c%ye*2tj1gD@xqy)9#Q*MIAmVlDV#%UBsi37nyJqa?6G{r zn!6tqnK)?rk!#q=)NrxNP%Sm(I^@)Fu6jsQE6O`Eb5$p}PlUSswXJ8q>O&5tN+C{B z4dc{n>NS>m#+0>9T~PQ=D1@Fv%p;iz>Z*#vUO|NV^fTd{$9*d}khy=eEt5;v#e5f` z4jd59HdPv&M3lA63MLwt*4Hz&z#R+v^fn7=fLwer-|Xb z=y-2)!x{dZEz`4{Mwn&<1sywrn#JuI9FYN1YMnYwS;GVc)wGBt2dNVz7c-Fh~c zRqhX4CJP*rx&EZB=L7wMHyoVzj|u0HIs{GtoWV{FFX`1@s$reVqFJe5^!r?T8>gke z=nt6F5OcTG`FDL8Wksm#rWIf7-}N6{pZ1RCYdSvyJ)+GAl54-drVB9VXTv$Juj_)$ zDR@C-a#(-p!p!Nt&o1jvT`Y`xC&|%#Qx|8M1iCYVH8yB%RbWo99d<6us>Pf`PA;!i zoAq39IEAdP%sJt3s#@K_QL2Dr)v8u6mYM6w)Ut-L=6+7;wXBgWGtH5?-o9Y63=sPq!WZ|y;?i^fWm~Mdb(T3}9X-vh^PFpjX~iMc#`+JJ zezmxrtDSX=b45FP+T&{y)L$<+dfHp}F=sQ{{@XShU+t}eK8iopu&+RzB&&l}m^nES z{fKi(cd&{xrSGPU(g9KQq^-G+HH2k`W0!^W6w`gJk<2-F+?MHY zjb+Xxtm~vc1FR>QQ{k$}EU_NJF9K5ygCE(shFLRxE5P{>v6pgT=h~XZoR3ZE#7Sb# zk*`8B$;>Hh>O(SV%-L${L!1oebTwrWXAYPCJ%%rpRo)tD&0|gjL-1In4NC)pgbnEOWz=*=Q+0S+#-FicOY>InOvP-DG*0(-HrYo+j1~ zs}ys3RToa2+G#~HXZAZ%R&~4$^N63u&MvIRrSvn_C_nkeY0PoN8D?Fu#xkb?<~W

{`CI5(|k;nc3P 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�k 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 IeNA;B$ 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%0AP0pGEJXPN^} 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 literal 0 HcmV?d00001 diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..dddcd0a --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 2eba78436bff947579d3c0255030d2e9 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml new file mode 100644 index 0000000..775fdd1 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml @@ -0,0 +1,11673 @@ + + + + Newtonsoft.Json + + + +

+ Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Gets or sets a value indicating whether the dates before Unix epoch + should converted to and from JSON. + + + true to allow converting dates before Unix epoch to and from JSON; + false to throw an exception when a date being converted to or from JSON + occurred before Unix epoch. The default value is false. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + true to allow converting dates before Unix epoch to and from JSON; + false to throw an exception when a date being converted to or from JSON + occurred before Unix epoch. The default value is false. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. This value overrides the formatting specified on . + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. This value overrides the formatting specified on . + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. A value is returned if the provided JSON is valid but represents a null value. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 64. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 64. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 64. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + using values copied from the passed in . + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when cloning JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a flag that indicates whether to copy annotations when cloning a . + The default value is true. + + + A flag that indicates whether to copy annotations when cloning a . + + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + The JSON for this token using the given formatting and converters. + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A object to configure cloning settings. + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + + Indicates that certain members on a specified are accessed dynamically, + for example through . + + + This allows tools to understand which members are being accessed during the execution + of a program. + + This attribute is valid on members whose type is or . + + When this attribute is applied to a location of type , the assumption is + that the string represents a fully qualified type name. + + When this attribute is applied to a class, interface, or struct, the members specified + can be accessed dynamically on instances returned from calling + on instances of that class, interface, or struct. + + If the attribute is applied to a method it's treated as a special case and it implies + the attribute should be applied to the "this" parameter of the method. As such the attribute + should only be used on instance methods of types assignable to System.Type (or string, but no methods + will use it there). + + + + + Initializes a new instance of the class + with the specified member types. + + The types of members dynamically accessed. + + + + Gets the which specifies the type + of members dynamically accessed. + + + + + Specifies the types of members that are dynamically accessed. + + This enumeration has a attribute that allows a + bitwise combination of its member values. + + + + + Specifies no members. + + + + + Specifies the default, parameterless public constructor. + + + + + Specifies all public constructors. + + + + + Specifies all non-public constructors. + + + + + Specifies all public methods. + + + + + Specifies all non-public methods. + + + + + Specifies all public fields. + + + + + Specifies all non-public fields. + + + + + Specifies all public nested types. + + + + + Specifies all non-public nested types. + + + + + Specifies all public properties. + + + + + Specifies all non-public properties. + + + + + Specifies all public events. + + + + + Specifies all non-public events. + + + + + Specifies all interfaces implemented by the type. + + + + + Specifies all members. + + + + + Indicates that the specified public static boolean get-only property + guards access to the specified feature. + + + Analyzers can use this to prevent warnings on calls to code that is + annotated as requiring that feature, when the callsite is guarded by a + call to the property. + + + + + Initializes a new instance of the class + with the specified feature type. + + + The type that represents the feature guarded by the property. + + + + + The type that represents the feature guarded by the property. + + + + + Indicates that the specified public static boolean get-only property + corresponds to the feature switch specified by name. + + + IL rewriters and compilers can use this to substitute the return value + of the specified property with the value of the feature switch. + + + + + Initializes a new instance of the class + with the specified feature switch name. + + + The name of the feature switch that provides the value for the specified property. + + + + + The name of the feature switch that provides the value for the specified property. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + + Indicates that the specified method requires the ability to generate new code at runtime, + for example through . + + + This allows tools to understand which methods are unsafe to call when compiling ahead of time. + + + + + Initializes a new instance of the class + with the specified message. + + + A message that contains information about the usage of dynamic code. + + + + + Gets a message that contains information about the usage of dynamic code. + + + + + Gets or sets an optional URL that contains more information about the method, + why it requires dynamic code, and what options a consumer has to deal with it. + + + + + Indicates that the specified method requires dynamic access to code that is not referenced + statically, for example through . + + + This allows tools to understand which methods are unsafe to call when removing unreferenced + code from an application. + + + + + Initializes a new instance of the class + with the specified message. + + + A message that contains information about the usage of unreferenced code. + + + + + Gets a message that contains information about the usage of unreferenced code. + + + + + Gets or sets an optional URL that contains more information about the method, + why it requires unreferenced code, and what options a consumer has to deal with it. + + + + + Suppresses reporting of a specific rule violation, allowing multiple suppressions on a + single code artifact. + + + is different than + in that it doesn't have a + . So it is always preserved in the compiled assembly. + + + + + Initializes a new instance of the + class, specifying the category of the tool and the identifier for an analysis rule. + + The category for the attribute. + The identifier of the analysis rule the attribute applies to. + + + + Gets the category identifying the classification of the attribute. + + + The property describes the tool or tool analysis category + for which a message suppression attribute applies. + + + + + Gets the identifier of the analysis tool rule to be suppressed. + + + Concatenated together, the and + properties form a unique check identifier. + + + + + Gets or sets the scope of the code that is relevant for the attribute. + + + The Scope property is an optional argument that specifies the metadata scope for which + the attribute is relevant. + + + + + Gets or sets a fully qualified path that represents the target of the attribute. + + + The property is an optional argument identifying the analysis target + of the attribute. An example value is "System.IO.Stream.ctor():System.Void". + Because it is fully qualified, it can be long, particularly for targets such as parameters. + The analysis tool user interface should be capable of automatically formatting the parameter. + + + + + Gets or sets an optional argument expanding on exclusion criteria. + + + The property is an optional argument that specifies additional + exclusion where the literal metadata target is not sufficiently precise. For example, + the cannot be applied within a method, + and it may be desirable to suppress a violation against a statement in the method that will + give a rule violation, but not against all statements in the method. + + + + + Gets or sets the justification for suppressing the code analysis message. + + + + diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml.meta new file mode 100644 index 0000000..b1edef3 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/lib/netstandard2.0/Newtonsoft.Json.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 238907e7e14784f5aa542da69585064e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png b/Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..10c06a5c4da3336c12fe3b61a37cfef8cd15cceb GIT binary patch literal 8956 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 Q{;CDSI^rBE?fuXHA7hI;RR910 literal 0 HcmV?d00001 diff --git a/Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png.meta b/Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png.meta new file mode 100644 index 0000000..b182307 --- /dev/null +++ b/Assets/Packages/Newtonsoft.Json.13.0.4/packageIcon.png.meta @@ -0,0 +1,182 @@ +fileFormatVersion: 2 +guid: ac44ff59f169f4b1d9b46cd04656855a +TextureImporter: + internalIDToNameTable: + - first: + 213: 8573975999917033648 + second: packageIcon_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: packageIcon_0 + rect: + serializedVersion: 2 + x: 21 + y: 22 + width: 469 + height: 469 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0b887cbbeb1ecf670800000000000000 + internalID: 8573975999917033648 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + packageIcon_0: 8573975999917033648 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/ZLinq.1.5.6.meta b/Assets/Packages/ZLinq.1.5.6.meta new file mode 100644 index 0000000..da63ac3 --- /dev/null +++ b/Assets/Packages/ZLinq.1.5.6.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ec6a70e790354739838d1fc74255222 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/ZLinq.1.5.6/.signature.p7s b/Assets/Packages/ZLinq.1.5.6/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..bd0c0094a5871aa5d7992b0ab8afa0db3472e9b0 GIT binary patch literal 12981 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 F_g^df?MVOt literal 0 HcmV?d00001 diff --git a/Assets/Packages/ZLinq.1.5.6/Icon.png b/Assets/Packages/ZLinq.1.5.6/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..68d64b1e0e5c10200e85a15ab96a0b43ff989f79 GIT binary patch literal 3185 zcmd5;4NOy46uwx2tpaMaI1$0bD9cb;bOT$#Jv;m%3Mq&bl}?@1ZbI#}yg3*kV$i6I z%n`;CD5ao)fT(j?N@H=+un42n1zIT}0voTZSeaE+qNwO&Ktb}oNr~~ah!x^+s2{b zQJT#p9z!#Dn}bPg-tNur*=7=(f94I8n;Z7DGJ!F;JsR0GpKXCJ2wBF-AI@M@4;CEg z40{3fzuNuRjb6C?pO!`}3iB-|$VuTgYD%^by4@hT@-G9N@-2^|z&EGVUn5#=d|~eF zRN85^^M$yBUuQg8Ct_*YK0(aY`5jN@SabYEyWIyGuZYCG?6TVQaz;j|GH@2-w!vS} zWVLK}CeHJ7gDNzG0T)fb9I1uj#P++D%YZkNm7suPuSHRlb%Nzup_eD~?uGj&wJ_fg z)G@k#LQ6X<&Bwc?^tq(Rv^Z+$miNh5p$fWo`UITPg2_4s z^o`Qg#@gr`aHw~aP&|=ns{=pAf*DMCW~?%BeZukvU*QvtP9+laEd94HE8J8yD$kk% z=>x$#S97ZL9Y@r~1B$sL;Vry@w(yV?P`1onHO*A3ulr>4WNBwZ$r~dTQv;DMnNzot z9vQ4=Ez}sF)M%_c@#{y3T%=lVo>&a9_)J8WjG=*py?t8DVRE{pIXDGnxIj0kM^nCi zB?xr9F8R^a=rdxlCX#BcGo5-ReHdTKN6RCQlChO@?4$P zw{qyVyh2MzDc8b8K-)1`qz3k}H?r8mL>^$4paNB-jx?ac_2OJc^$^CO)ErD4lBxfW zk>Q+AfH{B8#Gy7O0B9hDdw;3xGea=3p$5YggQ*7-yA`J|dL3;XRz2qFDbTUe0R%b= zt7lmXMC^cq8tPe!XScg~kgAI=6`pWs{hfM##3Qy<+xOdEWT-Hq55oxQN~vi<7YnIT z^ZFd`kKK_bcGk^^mzd_o)w`xu34{6Mtz3a`7R7}d;J zy*6U0ki*hzbH1i006}IFs^3w@ksd_eFzJUR^c70-E8Ntf({b#p@X|=Jn7TlNSc2=+ zvus?$jOe)ur;ZGkLf~MKyp3uB@uh@ot<9PE4sI0P&s#}*b9a4(JX5gEkgw6D^DG?; nKbDmhcKT)eOmzPo{ZI~Qz{z@ji^5RskI;mzjtH%0Z_oS(cSy02 literal 0 HcmV?d00001 diff --git a/Assets/Packages/ZLinq.1.5.6/Icon.png.meta b/Assets/Packages/ZLinq.1.5.6/Icon.png.meta new file mode 100644 index 0000000..fa5e6a8 --- /dev/null +++ b/Assets/Packages/ZLinq.1.5.6/Icon.png.meta @@ -0,0 +1,182 @@ +fileFormatVersion: 2 +guid: 557101bc99e2b4c78a749d52d5aa2c64 +TextureImporter: + internalIDToNameTable: + - first: + 213: -2278566297644842510 + second: Icon_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Icon_0 + rect: + serializedVersion: 2 + x: 49 + y: 65 + width: 395 + height: 362 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2f1c3bf4608e060e0800000000000000 + internalID: -2278566297644842510 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Icon_0: -2278566297644842510 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/ZLinq.1.5.6/README.md b/Assets/Packages/ZLinq.1.5.6/README.md new file mode 100644 index 0000000..d474872 --- /dev/null +++ b/Assets/Packages/ZLinq.1.5.6/README.md @@ -0,0 +1,1096 @@ +ZLinq +=== +[![CI](https://github.com/Cysharp/ZLinq/actions/workflows/build-debug.yaml/badge.svg)](https://github.com/Cysharp/ZLinq/actions/workflows/build-debug.yaml) +[![Benchmark](https://github.com/Cysharp/ZLinq/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/Cysharp/ZLinq/actions/workflows/benchmark.yaml) +[![NuGet](https://img.shields.io/nuget/v/ZLinq)](https://www.nuget.org/packages/ZLinq) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Cysharp/ZLinq) + +Zero allocation LINQ with LINQ to Span, LINQ to SIMD, and LINQ to Tree (FileSystem, JSON, GameObject, etc.) for all .NET platforms(netstandard2.0, 2.1, net8, net9) and Unity, Godot. + +![](img/benchmarkhead.jpg) + +Unlike regular LINQ, ZLinq doesn't increase allocations when adding more method chains, and it also has higher basic performance. You can check various benchmark patterns at [GitHub Actions/Benchmark](https://github.com/Cysharp/ZLinq/actions/runs/19324633887). ZLinq shows high performance in almost all patterns, with some benchmarks showing overwhelming differences. + +As a bonus, LINQ operators and optimizations equivalent to .NET 10 can be used in .NET Framework 4.8 (netstandard2.0) and Unity (netstandard2.1). + +```bash +dotnet add package ZLinq +``` + +```csharp +using ZLinq; + +var seq = source + .AsValueEnumerable() // only add this line + .Where(x => x % 2 == 0) + .Select(x => x * 3); + +foreach (var item in seq) { } +``` + +* **99% compatibility** with .NET 10's LINQ (including new `Shuffle`, `RightJoin`, `LeftJoin`, `Sequence`, `InfiniteSequence` operators) +* **Zero allocation** for method chains through struct-based Enumerable via `ValueEnumerable` +* **LINQ to Span** to full support LINQ operations on `Span` using .NET 9/C# 13's `allows ref struct` +* **LINQ to Tree** to extend tree-structured objects (built-in support for FileSystem, JSON, GameObject) +* **LINQ to SIMD** to automatic application of SIMD where possible and customizable arbitrary operations +* Optional **Drop-in replacement** Source Generator to automatically accelerate all LINQ methods + +In ZLinq, we have proven high compatibility and performance by running [dotnet/runtime's System.Linq.Tests](https://github.com/Cysharp/ZLinq/tree/main/tests/System.Linq.Tests) as a drop-in replacement, passing 9000 tests. + +![](img/testrun.png) + +Previously, value type-based LINQ implementations were often experimental, but ZLinq fully implements all methods to completely replace standard LINQ in production use, delivering high performance suitable even for demanding applications like games. The performance aspects are based on my experience with previous LINQ implementations ([linq.js](https://github.com/neuecc/linq.js/), [SimdLinq](https://github.com/Cysharp/SimdLinq/), [UniRx](https://github.com/neuecc/UniRx), [R3](https://github.com/Cysharp/R3)), zero-allocation implementations ([ZString](https://github.com/Cysharp/ZString), [ZLogger](https://github.com/Cysharp/ZLogger)), and high-performance serializers ([MessagePack-CSharp](https://github.com/MessagePack-CSharp/MessagePack-CSharp/), [MemoryPack](https://github.com/Cysharp/MemoryPack)). + +ZLinq achieves zero-allocation LINQ implementation using the following structs and interfaces. + +```csharp +public readonly ref struct ValueEnumerable(TEnumerator enumerator) + where TEnumerator : struct, IValueEnumerator, allows ref struct +{ + public readonly TEnumerator Enumerator = enumerator; +} + +public interface IValueEnumerator : IDisposable +{ + bool TryGetNext(out T current); // as MoveNext + Current + + // Optimization helper + bool TryGetNonEnumeratedCount(out int count); + bool TryGetSpan(out ReadOnlySpan span); + bool TryCopyTo(scoped Span destination, Index offset); +} +``` + +Besides changing to a struct-based approach, we've integrated MoveNext and Current to reduce the number of iterator calls. Also, some operators don't need to hold Current, which allows minimizing the struct size. Additionally, being struct-based, we efficiently separate internal state by copying the Enumerator instead of using GetEnumerator. With .NET 9/C# 13 or later, `allows ref struct` enables natural integration of `Span` into LINQ. + +```csharp +public static ValueEnumerable, TSource> Where(this ValueEnumerable source, Func predicate) + where TEnumerator : struct, IValueEnumerator, allows ref struct +```` + +Operators have this method signature. C# cannot infer types from generic constraints([dotnet/csharplang#6930](https://github.com/dotnet/csharplang/discussions/6930)). Therefore, the traditional Struct LINQ approach required implementing all operator combinations as instance methods, resulting in [100,000+ methods and massive assembly sizes](https://kevinmontrose.com/2018/01/17/linqaf-replacing-linq-and-not-allocating/). However, in ZLinq, we've successfully avoided all the boilerplate method implementations by devising an approach that properly conveys types to C# compiler. + +Additionally, `TryGetNonEnumeratedCount(out int count)`, `TryGetSpan(out ReadOnlySpan span)`, and `TryCopyTo(Span destination, Index offset)` defined in the interface itself enable flexible optimizations. To minimize assembly size, we've designed the library to achieve maximum optimization with minimal method additions. For example, `TryCopyTo` works efficiently with methods like `ToArray` when combined with `TryGetNonEnumeratedCount`. However, it also allows copying to smaller-sized destinations. By combining this with Index, we can optimize `First`, `Last`, and `ElementAt` using just `TryCopyTo` by passing a single-element Span along with an Index. + +If you're interested in architecture, please read my blog post [**"ZLinq", a Zero-Allocation LINQ Library for .NET**](https://neuecc.medium.com/zlinq-a-zero-allocation-linq-library-for-net-1bb0a3e5c749) where I wrote the details. + +Getting Started +--- +You can install package from [NuGet/ZLinq](https://www.nuget.org/packages/ZLinq). For Unity usage, refer to the [Unity section](#unity). For Godot usage, refer to the [Godot section](#godot). + +```bash +dotnet add package ZLinq +``` + +Use `using ZLinq;` and call `AsValueEnumerable()` on any iterable type to use ZLinq's zero-allocation LINQ. + +```csharp +using ZLinq; + +var source = new int[] { 1, 2, 3, 4, 5 }; + +// Call AsValueEnumerable to apply ZLinq +var seq1 = source.AsValueEnumerable().Where(x => x % 2 == 0); + +// Can also be applied to Span (only in .NET 9/C# 13 environments that support allows ref struct) +Span span = stackalloc int[5] { 1, 2, 3, 4, 5 }; +var seq2 = span.AsValueEnumerable().Select(x => x * x); +``` + +Even if it's netstandard 2.0 or below .NET 10, all operators up to .NET 10 are available. + +You can method chain and foreach like regular LINQ, but there are some limitations. Please see [Difference and Limitation](#difference-and-limitation) for details. ZLinq has drop-in replacements that apply ZLinq without needing to call `AsValueEnumerable()`. For more information, see [Drop-in replacement](#drop-in-replacement). Detailed information about [LINQ to Tree](#linq-to-tree) for LINQ-ifying tree structures (FileSystems and JSON) and [LINQ to SIMD](#linq-to-simd) for expanding SIMD application range can be found in their respective sections. + +Additional Operators +--- +In ZLinq, we prioritize compatibility, so we try to minimize adding custom operators. However, the following methods have been added to enable efficient processing with zero allocation: + +### `AsValueEnumerable()` + +Converts existing collections to a type that can be chained with ZLinq. Any `IEnumerable` can be converted, but for the following types, conversion is done with zero allocation without `IEnumerable.GetEnumerator()` allocation. Standard supported types are `T[]`, `List`, `ArraySegment`, `Memory`, `ReadOnlyMemory`, `ReadOnlySequence`, `Dictionary`, `Queue`, `Stack`, `LinkedList`, `HashSet`, `ImmutableArray`, `Span`, `ReadOnlySpan`. However, conversion from `ImmutableArray` requires `.NET 8` or higher, and conversion from `Span`, `ReadOnlySpan` requires `.NET 9` or higher. + +When a type is declared as `IEnumerable` or `ICollection` rather than concrete types like `T[]` or `List`, generally additional allocations occur when using foreach. In `ZLinq`, even when these interfaces are declared, if the actual type is `T[]` or `List`, processing is performed with zero allocation. + +Convert from `System.Collections.IEnumerable` is also supported. In that case, using `AsValueEnumerable()` without specifying a type converts to `ValueEnumerable<, object>`, but you can also cast it simultaneously by `AsValueEnumerable()`. + +```csharp +IEnumerable nonGenericCollection = default!; +nonGenericCollection.AsValueEnumerable(); // ValueEnumerable<, object> +nonGenericCollection.AsValueEnumerable(); // ValueEnumerable<, int> +``` + +### `ValueEnumerable.Range()`, `ValueEnumerable.Repeat()`, `ValueEnumerable.Empty()` + +`ValueEnumerable.Range` operates more efficiently when handling with `ZLinq` than `Enumerable.Range().AsValueEnumerable()`. The same applies to `Repeat` and `Empty`. The Range can also handle step increments, `INumber`, `DateTime`, and more. Please refer to the [Range and Sequence](#range-and-sequence) section for details. + +### `Sequence`, `InfiniteSequence` for all .NET Platforms + +`Sequence` and `InfiniteSequence` were added in .NET 10. They require `INumber`, but `INumber` was introduced in `.NET 7`. `ZLinq` implements `INumber` methods the same as standard LINQ, but additionaly adds primitive type overloads(`byte/sbyte/ushort/char/short/uint/int/ulong/long/float/double/decimal`) to support all .NET Platforms(includes .NET Standard 2.0). Additionaly, as a bonus, `DateTime` and `DateTimeOffset` overload exists. + +### `Average() : where INumber`, `Sum() : where INumber` + +System.Linq's `Average` and `Sum` are limited to certain primitive types, but ZLinq extends them to all `INumber` types. In `.NET 8` or higher, where constraints are included, but for others (netstandard2.0, 2.1), runtime errors will occur when called with non-primitive target types. + +### `SumUnchecked()` + +`Sum` is `checked`, but checking for overflow during SIMD execution creates performance overhead. `SumUnchecked` skips overflow checking to achieve maximum SIMD aggregation performance. Note that this requires `.NET 8` or higher, and SIMD-supported types are `sbyte`, `short`, `int`, `long`, `byte`, `ushort`, `uint`, `ulong`, `double`, and the source must be able to get a Span (`TryGetSpan` returns true). + +### `AggregateBy`, `CountBy` constraints + +.NET 9 `AggregateBy` and `CountBy` has `TKey : notnull` constraints. However, this is due to internal implementation considerations, and it lacks consistency with traditional operators such as Lookup and Join. Therefore, in ZLinq, the notnull constraint was removed. + +### `int CopyTo(Span destination)`, `void CopyTo(List list)` + +`CopyTo` can be used to avoid allocation of the return collection unlike `ToArray` or `ToList`. `int CopyTo(Span destination)` allows the destination to be smaller than the source, returning the number of elements copied. `void CopyTo(List list)` clears the list and then fills it with elements from the source, so the destination size is list.Count. + +### `PooledArray ToArrayPool()` + +The returned array is rented from `ArrayPool.Shared`. `PooledArray` defines `.Span`, `.Memory`, `.AsEnumerable()` and other methods. These allow you to pass a `ValueEnumerable` to another method while minimizing allocations. Additionally, through `.AsValueEnumerable()`, you can call `ZLinq` methods, which is useful for temporarily materializing computationally expensive operations. Being `IDisposable`, you can return the borrowed array to `ArrayPool.Shared` using the `using` statement. + +```csharp +using var array = ValueEnumerable.Range(1, 1000).ToArrayPool(); + +var size = array.Size; // same as Length/Count in other types +var span = array.Span; +var memory = array.Memory; +var arraySegment = array.ArraySegment; +var enumerable = array.AsEnumerable(); +var valueEnumerable = array.AsValueEnumerable(); +``` + +For performance reasons to reduce allocations, `PooledArray` is a `struct`. This creates a risk of returning the same array multiple times due to boxing or copying. Also, ArrayPool is not suitable for long-term array storage. It is recommended to simply use `ToArrayPool()` with `using` and keep the lifetime short. + +If you absolutely need the raw internal array, you can `Deconstruct` it to `(T[] Array, int Size)`. After deconstructing, ownership is considered transferred, and all methods of `PooledArray` become unavailable. + +### `JoinToString(char|string separator)` + +Since `ZLinq` is not `IEnumerable`, it cannot be passed to `String.Join`. `JoinToString` provides the same functionality as `String.Join`, returning a string joined with the separator. + +Range and Sequence +--- +In .NET 10, `Enumerable.Sequence` and `Enumerable.InfiniteSequence` have been added, improving the expressiveness of Range operations. ZLinq also implements these, so they can be used. However, since they require `INumber` and `IAdditionalOperator`, they are limited to .NET 8 and above. ZLinq makes `Sequence` and `InfiniteSequence` available on all .NET Platforms (including .NET Standard 2.0) by adding primitive type overloads (`byte/sbyte/ushort/char/short/uint/int/ulong/long/float/double/decimal`). + +In ZLinq, for .NET 8 and above, `Range` also supports `INumber`, and step overloads have been added. + +```csharp +public static ValueEnumerable, T> Range(T start, int count) + where T : INumberBase + +public static ValueEnumerable, T> Range(T start, int count, TStep step) + where T : IAdditionOperators +``` + +Furthermore, `Range`, `Sequence`, and `InfiniteSequence` have added overloads for `DateTime` and `DateTimeOffset`. These are available on all target platforms. + +```csharp +public static ValueEnumerable Range(DateTime start, int count, TimeSpan step) => new(new(start, count, step)); +public static ValueEnumerable Range(DateTimeOffset start, int count, TimeSpan step) => new(new(start, count, step)); +public static ValueEnumerable Sequence(DateTime start, DateTime endInclusive, TimeSpan step) +public static ValueEnumerable Sequence(DateTimeOffset start, DateTimeOffset endInclusive, TimeSpan step) +public static ValueEnumerable InfiniteSequence(DateTime start, TimeSpan step) +public static ValueEnumerable InfiniteSequence(DateTimeOffset start, TimeSpan step) +``` + +```csharp +// DateTime/DateTimeOffset example + +// 5/13, 5/14, 5/15, 5/16, 5/17, 5/18, 5/19 +var daysOfweek = ValueEnumerable.Range(DateTime.Now, 7, TimeSpan.FromDays(1)); + +// 5/1, 5/2,...,5/31 +var now = DateTime.Now; +var calendarOfThisMonth = ValueEnumerable.Range(new DateTime(now.Year, now.Month, 1), DateTime.DaysInMonth(now.Year, now.Month), TimeSpan.FromDays(1)); + +// 5/1, 5/2,..., +var endlessDate = ValueEnumerable.InfiniteSequence(DateTime.Now, TimeSpan.FromDays(1)); +``` + +Difference and Limitation +--- +For .NET 9 and above, `ValueEnumerable` is a `ref struct` and cannot be converted to `IEnumerable`. To ensure compatibility when upgrading, `AsEnumerable` is not provided by default even for versions prior to .NET 9. + +Since `ValueEnumerable` is not an `IEnumerable`, it cannot be passed to methods that require `IEnumerable`. It's also difficult to pass it to other methods due to the complex type signatures required by generics (implementation is explained in the [Custom Extensions](#custom-extensions) section). Using `ToArray()` is one solution, but this can cause unnecessary allocations in some cases. For temporary use, you can call `ToArrayPool` to pass to methods that require `IEnumerable` without allocations. However, be careful that this `IEnumerable` will be returned within the using scope, so you must ensure it doesn't leak outside the scope (storing it in a field is not allowed). + +`String.Join` has overloads for both `IEnumerable` and `params object[]`. Passing `ValueEnumerable` directly will select the `object[]` overload, which may not give the desired result. In this case, use the `JoinToString` operator instead. + +`ValueEnumerable` is a struct, and its size increases slightly with each method chain. With many chained methods, copy costs can become significant. When iterating over small collections, these copy costs can outweigh the benefits, causing performance to be worse than standard LINQ. However, this is only an issue with extremely long method chains and small iteration counts, so it's rarely a practical concern. + +`ValueEnumerable` is `ref struct` in .NET 9 or above, this means that it cannot span across yield or await. Using yield or await inside foreach also fails and shows compilation errors. If enumeration is needed, please materialize the data using methods like [ToArrayPool](#pooledarraytsource-toarraypool). + +Each chain operation returns a different type, so you cannot reassign to the same variable. For example, code that continuously reassigns `Concat` in a for loop cannot be implemented. + +In .NET 8 and above, the `Sum` and `Average` methods for `double` use SIMD processing, which performs parallel processing based on SIMD width. This results in calculation errors that differ from normal ones due to the different order of addition. + +Drop-in replacement +--- +When introducing `ZLinq.DropInGenerator`, you can automatically use ZLinq for all LINQ methods without calling `AsValueEnumerable()`. + +```bash +dotnet add package ZLinq.DropInGenerator +``` + +![](img/dropin.jpg) + +It works by using a Source Generator to add extension methods for each type that take priority, making `ZLinq` methods be selected instead of System.Linq when the same name and arguments are used. +After installing the package, you need to configure it with an assembly attribute. + +```csharp +[assembly: ZLinq.ZLinqDropInAttribute("ZLinq", ZLinq.DropInGenerateTypes.Array)] +``` + +`generateNamespace` is the namespace for the generated code, and `DropInGenerateTypes` selects the target types. +`DropInGenerateTypes` allows you to choose from `Array`, `Span` (Span/ReadOnlySpan), `Memory` (Memory/ReadOnlyMemory), `List`, and `Enumerable` (IEnumerable). +These are Flags, so you can combine them, such as `DropInGenerateTypes.Array | DropInGenerateTypes.Span`. +There are also predefined combinations: `Collection = Array | Span | Memory | List` and `Everything = Array | Span | Memory | List | Enumerable`. + +When using `DropInGenerateTypes.Enumerable`, which generates extension methods for `IEnumerable`, you need to make `generateNamespace` global as a namespace priority. +For example: + +```csharp +[assembly: ZLinq.ZLinqDropInAttribute("", ZLinq.DropInGenerateTypes.Everything)] +``` + +This is the most aggressive configuration, causing all LINQ methods to be processed by ZLinq, and making it impossible to use normal LINQ methods (if Enumerable is not included, you can call AsEnumerable() to execute with System.Linq). + +It's better to use application's default namespace rather than globally, as this allows you to switch between normal LINQ using namespaces. This approach is recommended when you need to target `Enumerable`. + +```csharp +using ZLinq; + +[assembly: ZLinqDropInAttribute("MyApp", DropInGenerateTypes.Everything)] + +// namespace under MyApp +namespace MyApp.Foo +{ + public class Bar + { + public static void Foo(IEnumerable source) + { + // ZLinq ValueEnumerable + var seq = source.Select(x => x * 2).Shuffle(); + using var e = seq.Enumerator; + while (e.TryGetNext(out var current)) + { + Console.WriteLine(current); + } + } + } +} + +// not under MyApp namespace +namespace NotMyApp +{ + public class Baz + { + public static void Foo(IEnumerable source) + { + // IEnumerable + var seq = source.Select(x => x * 2); // .Shuffle(); + using var e = seq.GetEnumerator(); + while (e.MoveNext()) + { + Console.WriteLine(e.Current); + } + } + } +} +``` + +ZLinq is powerful and in many cases it performs better than regular LINQ, but it also has its limitations. For more information, please refer to [Difference and Limitation](#difference-and-limitation). When you are not familiar with it, we recommend that you use `DropInGenerateTypes.Collection` instead of `DropInGenerateTypes.Everything`. + +Other options for `ZLinqDropInAttribute` include `GenerateAsPublic`, `ConditionalCompilationSymbols`, and `DisableEmitSource`. + +```csharp +[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] +public sealed class ZLinqDropInAttribute : Attribute +{ + /// + /// Gets the namespace where the generated LINQ implementations will be placed. + /// If empty, the implementations will be generated in the global namespace. + /// + public string GenerateNamespace { get; } + + /// + /// Gets the types of collections for which LINQ implementations should be generated. + /// + public DropInGenerateTypes DropInGenerateTypes { get; } + + /// + /// Gets whether the generated LINQ implementations should be public. + /// When true, the implementations will be generated with public visibility. + /// When false (default), the implementations will be generated with internal visibility. + /// + public bool GenerateAsPublic { get; set; } + + /// + /// Gets or sets the conditional compilation symbols to wrap the generated code with #if directives. + /// If specified, the generated code will be wrapped in #if/#endif directives using these symbols. + /// + public string? ConditionalCompilationSymbols { get; set; } + + /// + /// Gets or sets whether to disable source generation in emitted code. + /// When true, the source code comments will not be included in the generated code. + /// When false (default), source code comments will be included in the generated code. + /// + public bool DisableEmitSource { get; set; } + + /// + /// Initializes a new instance of the class. + /// + /// The namespace where the generated LINQ implementations will be placed. If empty, place to global. + /// The types of collections for which LINQ implementations should be generated. + public ZLinqDropInAttribute(string generateNamespace, DropInGenerateTypes dropInGenerateTypes) + { + GenerateNamespace = generateNamespace; + DropInGenerateTypes = dropInGenerateTypes; + } +} +``` + +To support DropIn types other than `DropInGenerateTypes`, you can use `ZLinqDropInExternalExtensionAttribute`. This attribute allows you to generate DropIn for any type by specifying its fully qualified name. For example, to add support for `IReadOnlyCollection` and `IReadOnlyList`, write: + +```csharp +// T must be written as `1 (metadata-name). For nested types, connect with + +[assembly: ZLinqDropInExternalExtension("ZLinq", "System.Collections.Generic.IReadOnlyCollection`1")] +[assembly: ZLinqDropInExternalExtension("ZLinq", "System.Collections.Generic.IReadOnlyList`1")] +``` + +For types that support `IValueEnumerator` through `AsValueEnumerable()`, specify the ValueEnumerator type name as the second argument. For example, with `ImmutableArray`: + +```csharp +[assembly: ZLinqDropInExternalExtension("ZLinq", "System.Collections.Immutable.ImmutableArray`1", "ZLinq.Linq.FromImmutableArray`1")] +``` + +This allows all operators to be processed by ZLinq using an optimized type. + +If you want to make your custom collection types DropIn compatible, you can embed them in your assembly using `[ZLinqDropInExtension]`. + +```csharp +[ZLinqDropInExtension] +public class AddOnlyIntList : IEnumerable +{ + List list = new List(); + + public void Add(int x) => list.Add(x); + + public IEnumerator GetEnumerator() => list.GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => list.GetEnumerator(); +} +``` + +This generates a `public static partial class AddOnlyIntListZLinqDropInExtensions` in the same namespace, overriding all LINQ operators with ZLinq. This works with generic types as well: + +```csharp +[ZLinqDropInExtension] +public class AddOnlyList : IEnumerable +``` + +While `[ZLinqDropInExtension]` works with classes implementing `IEnumerable`, implementing `IValueEnumerable` provides zero-allocation optimization for ZLinq: + +```csharp +[ZLinqDropInExtension] +public class AddOnlyIntList2 : IValueEnumerable +{ + List list = new List(); + + public void Add(int x) => list.Add(x); + + public ValueEnumerable, int> AsValueEnumerable() + { + // you need to write new(new(new())) magic. + return new(new(new(list))); + } + + // `public` struct enumerator + public struct Enumerator(List source) : IValueEnumerator + { + int index; + + public bool TryGetNonEnumeratedCount(out int count) + { + count = source.Count; + return true; + } + + public bool TryGetSpan(out ReadOnlySpan span) + { + span = CollectionsMarshal.AsSpan(source); + return true; + } + + public bool TryCopyTo(scoped Span destination, Index offset) + { + // Optional path: if you can not write this, always return false is ok. + ReadOnlySpan span = CollectionsMarshal.AsSpan(source); + if (ZLinq.Internal.EnumeratorHelper.TryGetSlice(span, offset, destination.Length, out var slice)) + { + slice.CopyTo(destination); + return true; + + } + return false; + } + + public bool TryGetNext(out int current) + { + if (index < source.Count) + { + current = source[index]; + index++; + return true; + } + + current = default; + return false; + } + + public void Dispose() { } + } +} +``` + +In this case, implementing `IEnumerable` is not necessary. If a collection implements both `IEnumerable` and `IValueEnumerable`, the latter takes precedence. + +LINQ to Tree +--- +LINQ to XML introduced the concept of querying around axes to C#. Even if you don't use XML, similar APIs are incorporated into Roslyn and effectively used for exploring SyntaxTrees. ZLinq extends this concept to make it applicable to anything that can be considered a Tree, allowing `Ancestors`, `Children`, `Descendants`, `BeforeSelf`, and `AfterSelf` to be applied. + +![](img/axis.jpg) + +Specifically, by defining a struct that implements the following interface, it becomes iterable: + +```csharp +public interface ITraverser : IDisposable + where TTraverser : struct, ITraverser // self +{ + T Origin { get; } + TTraverser ConvertToTraverser(T next); // for Descendants + bool TryGetHasChild(out bool hasChild); // optional: optimize use for Descendants + bool TryGetChildCount(out int count); // optional: optimize use for Children + bool TryGetParent(out T parent); // for Ancestors + bool TryGetNextChild(out T child); // for Children | Descendants + bool TryGetNextSibling(out T next); // for AfterSelf + bool TryGetPreviousSibling(out T previous); // BeforeSelf +} +``` + +Standard packages are available for FileSystemInfo and JsonNode. For Unity, it's applicable to GameObject and Transform. + +### FileSystem + +```bash +dotnet add package ZLinq.FileSystem +``` + +```csharp +using ZLinq; + +var root = new DirectoryInfo("C:\\Program Files (x86)\\Steam"); + +// FileSystemInfo(FileInfo/DirectoryInfo) can call `Ancestors`, `Children`, `Descendants`, `BeforeSelf`, `AfterSelf` +var allDlls = root + .Descendants() + .OfType() + .Where(x => x.Extension == ".dll"); + +var grouped = allDlls + .GroupBy(x => x.Name) + .Select(x => new { FileName = x.Key, Count = x.Count() }) + .OrderByDescending(x => x.Count); + +foreach (var item in grouped) +{ + Console.WriteLine(item); +} +``` + +### JSON(System.Text.Json) + +```bash +dotnet add package ZLinq.Json +``` + +```csharp +using ZLinq; + +// System.Text.Json's JsonNode is the target of LINQ to JSON(not JsonDocument/JsonElement). +var json = JsonNode.Parse(""" +{ + "nesting": { + "level1": { + "description": "First level of nesting", + "value": 100, + "level2": { + "description": "Second level of nesting", + "flags": [true, false, true], + "level3": { + "description": "Third level of nesting", + "coordinates": { + "x": 10.5, + "y": 20.75, + "z": -5.0 + }, + "level4": { + "description": "Fourth level of nesting", + "metadata": { + "created": "2025-02-15T14:30:00Z", + "modified": null, + "version": 2.1 + }, + "level5": { + "description": "Fifth level of nesting", + "settings": { + "enabled": true, + "threshold": 0.85, + "options": ["fast", "accurate", "balanced"], + "config": { + "timeout": 30000, + "retries": 3, + "deepSetting": { + "algorithm": "advanced", + "parameters": [1, 1, 2, 3, 5, 8, 13] + } + } + } + } + } + } + } + } + } +} +"""); + +// JsonNode +var origin = json!["nesting"]!["level1"]!["level2"]!; + +// JsonNode axis, Children, Descendants, Anestors, BeforeSelf, AfterSelf and ***Self. +foreach (var item in origin.Descendants().Select(x => x.Node).OfType()) +{ + // [true, false, true], ["fast", "accurate", "balanced"], [1, 1, 2, 3, 5, 8, 13] + Console.WriteLine(item.ToJsonString(JsonSerializerOptions.Web)); +} +``` + +### GameObject/Transform(Unity) + +see: [unity](#unity) section. + +LINQ to SIMD +--- +In .NET 8 and above, there are operators that apply SIMD when `ValueEnumerable.TryGetSpan` returns true. The scope of application is wider than in regular System.Linq. + +* **Range** to ToArray/ToList/CopyTo/etc... +* **Repeat** for `unmanaged struct` and `size is power of 2` to ToArray/ToList/CopyTo/etc... +* **Sum** for `sbyte`, `short`, `int`, `long`, `byte`, `ushort`, `uint`, `ulong`, `double` +* **SumUnchecked** for `sbyte`, `short`, `int`, `long`, `byte`, `ushort`, `uint`, `ulong`, `double` +* **Average** for `sbyte`, `short`, `int`, `long`, `byte`, `ushort`, `uint`, `ulong`, `double` +* **Max** for `byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `nint`, `nuint`, `Int128`, `UInt128` +* **Min** for `byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `nint`, `nuint`, `Int128`, `UInt128` +* **Contains** for `byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `bool`, `char`, `nint`, `nuint` +* **SequenceEqual** for `byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `bool`, `char`, `nint`, `nuint` + +`Sum` performs calculations as checked, but if you don't need to worry about overflow, using `SumUnchecked` is faster. + +| Method | N | Mean | Allocated | +|------------------ |------ |--------------:|----------:| +| ForLoop | 16384 | 25,198.556 ns | - | +| SystemLinqSum | 16384 | 1,402.259 ns | - | +| ZLinqSum | 16384 | 1,351.449 ns | - | +| ZLinqSumUnchecked | 16384 | 721.832 ns | - | + +By using `ZLinq.Simd` in your using statements, you can call `.AsVectorizable()` on `T[]` or `Span` or `ReadOnlySpan`, which allows you to use `Sum`, `SumUnchecked`, `Average`, `Max`, `Min`, `Contains`, and `SequenceEqual`. This explicitly indicates execution with SIMD regardless of the LINQ chain state (though type checking is ambiguous so processing might occur in a normal loop, and if `Vector.IsHardwareAccelerated && Vector.IsSupported` is false, normal loop processing will be used). + +From `int[]` or `Span`, you can call `VectorizedFillRange`. This is equivalent to `ValueEunmerable.Range().CopyTo()` and allows you to quickly generate sequential numbers through SIMD processing. + +| Method | Mean | Allocated | +|------- |-----------:|----------:| +| Range | 540.0 ns | - | +| For | 6,228.9 ns | - | + +### `VectorizedUpdate` + +In ZLinq, you can perform relatively flexible vectorized loop processing using `Func`. With `T[]` and `Span`, you can use the `VectorizedUpdate` method. By writing two lambda expressions - `Func, Vector> vectorFunc` for vector operations and `Func func` for handling remainder elements - you can perform loop update processing at SIMD width. + +```csharp +using ZLinq.Simd; // needs using + +int[] source = Enumerable.Range(0, 10000).ToArray(); + +[Benchmark] +public void For() +{ + for (int i = 0; i < source.Length; i++) + { + source[i] = source[i] * 10; + } +} + +[Benchmark] +public void VectorizedUpdate() +{ + // arg1: Vector => Vector + // arg2: int => int + source.VectorizedUpdate(static x => x * 10, static x => x * 10); +} +``` + +| Method | N | Mean | Error | StdDev | Allocated | +|----------------- |------ |-----------:|---------:|--------:|----------:| +| For | 10000 | 4,560.5 ns | 67.24 ns | 3.69 ns | - | +| VectorizedUpdate | 10000 | 558.9 ns | 6.42 ns | 0.35 ns | - | + +There is delegate overhead when compared to writing everything inline, but processing can be faster than using for-loops. However, this varies case by case, so please take measurements in advance based on your data volume and method content. Of course, if you're seeking the best possible performance, you should write code inline. + +### Vectorizable Methods + +You can convert from `T[]` or `Span` or `ReadOnlySpan` to `Vectorizable` using `AsVectorizable()`, which allows you to use `Aggregate`, `All`, `Any`, `Count`, `Select`, and `Zip` methods that accept a `Func` as an argument. + +* `Aggregate` + +```csharp +source.AsVectorizable().Aggregate((x, y) => Vector.Min(x, y), (x, y) => Math.Min(x, y)) +``` + +* `All` + +```csharp +source.AsVectorizable().All(x => Vector.GreaterThanAll(x, new(5000)), x => x > 5000); +``` + +* `Any` + +```csharp +source.AsVectorizable().Any(x => Vector.LessThanAll(x, new(5000)), x => x < 5000); +``` + +* `Count` + +```csharp +source.AsVectorizable().Count(x => Vector.GreaterThan(x, new(5000)), x => x > 5000); +``` + +| Method | Mean | Error | StdDev | Allocated | +|------------------ |------------:|---------:|--------:|----------:| +| VectorizableCount | 1,048.4 ns | 39.39 ns | 2.16 ns | - | +| LinqCount | 10,909.3 ns | 54.79 ns | 3.00 ns | - | + +* `Select` -> `ToArray` or `CopyTo` + +```csharp +source.AsVectorizable().Select(x => x * 3, x => x * 3).ToArray(); +source.AsVectorizable().Select(x => x * 3, x => x * 3).CopyTo(destination); +``` + +* `Zip` -> `ToArray` or `CopyTo` + +```csharp +// Zip2 +array1.AsVectorizable().Zip(array2, (x, y) => x + y, (x, y) => x + y).CopyTo(destination); +array1.AsVectorizable().Zip(array2, (x, y) => x + y, (x, y) => x + y).ToArray(); + +// Zip3 +array1.AsVectorizable().Zip(array2, array3, (x, y, z) => x + y + z, (x, y, z) => x + y + z).CopyTo(destination); +array1.AsVectorizable().Zip(array2, array3, (x, y, z) => x + y + z, (x, y, z) => x + y + z).ToArray(); +``` + +| Method | Mean | +|---------------------------- |----------:| +| ZLinqVectorizableZipCopyTo | 24.17 μs | +| ZLinqVectorizableZip3CopyTo | 29.26 μs | +| ZLinqZipCopyTo | 329.43 μs | +| ZLinqZip3CopyTo | 584.69 μs | + + +Unity +--- +There are two installation steps required to use it in Unity. + +1. Install `ZLinq` from NuGet using [NuGetForUnity](https://github.com/GlitchEnzo/NuGetForUnity) +Open Window from NuGet -> Manage NuGet Packages, Search "ZLinq" and Press Install. + +2. Install the `ZLinq.Unity` package by referencing the git URL + +```bash +https://github.com/Cysharp/ZLinq.git?path=src/ZLinq.Unity/Assets/ZLinq.Unity +``` + +With the help of the Unity package, in addition to the standard ZLinq, LINQ to GameObject functionality becomes available for exploring GameObject/Transform. + +![](img/axis.jpg) + +```csharp +using ZLinq; + +public class SampleScript : MonoBehaviour +{ + public Transform Origin; + + void Start() + { + Debug.Log("Ancestors--------------"); // Container, Root + foreach (var item in Origin.Ancestors()) Debug.Log(item.name); + + Debug.Log("Children--------------"); // Sphere_A, Sphere_B, Group, Sphere_A, Sphere_B + foreach (var item in Origin.Children()) Debug.Log(item.name); + + Debug.Log("Descendants--------------"); // Sphere_A, Sphere_B, Group, P1, Group, Sphere_B, P2, Sphere_A, Sphere_B + foreach (var item in Origin.Descendants()) Debug.Log(item.name); + + Debug.Log("BeforeSelf--------------"); // C1, C2 + foreach (var item in Origin.BeforeSelf()) Debug.Log(item.name); + + Debug.Log("AfterSelf--------------"); // C3, C4 + foreach (var item in Origin.AfterSelf()) Debug.Log(item.name); + } +} +``` + +You can chain query(LINQ to Objects). Also, you can filter by component using the `OfComponent` helper. + +```csharp +// all filtered(tag == "foobar") objects +var foobars = root.Descendants().Where(x => x.tag == "foobar"); + +// get FooScript under self childer objects and self +var fooScripts = root.ChildrenAndSelf().OfComponent(); +``` + +UI Toolkit VisualElements are also supported allowing more advanced queries + +```csharp +public class SampleScript : MonoBehaviour +{ + private UIDocument Document; + + private void Start() + { + var noTextButtons = Document + .rootVisualElement + .Descendants() + .OfType